回 帖 发 新 帖 刷新版面

主题:快捷方式不能运行

ShellExecute Me.hwnd, "open", App.Path & "\Add\" & List7.Text, vbNullString, vbNullString, 0

App.Path & "\Add\" & List7.Text 是Add文件夹内的所有文件列表
如上面所说,运行exe文件没有问题,可是运行lnk文件就不行了,请教该怎么解决?

回复列表 (共17个回复)

沙发

快捷方式本就不是可执行文件!

板凳

那么该怎么让他运行呢?
我想应该有能直接运行的方法,我在网上查了一些,不过我试了,都不能运行lnk文件!
如果要获取文件的实际地址再运行,感觉就太过分了.........

3 楼

查的最多的2个方法:
1: start + LNK文件 ,试过了,不行
2:Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\Add\" & List7.Text, vbHide  这样也是只能运行exe文件!

4 楼

你试试看这个:
She11   "Rundll32.exe   url.dll,   FileProtocolHandler   X"  
X代表要运行的文件,包括路径

5 楼

已经试了,不可以的!!!!!!!

6 楼

那就找api函数看看

7 楼

如果文件名太长,转化成8.3路径.
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Sub Command1_Click()
 
   Shell "rundll32.exe url.dll,FileProtocolHandler " & ShortPath( App.Path & "\Add\" & List7.Text"), vbNormalFocus   '不要用VbHide,否则会看不到窗口
End Sub

Private Function ShortPath(ByVal FileName As String) As String
   Dim S As String
   S = String(255, Chr(0))
   GetShortPathName FileName, S, 255
   ShortPath = Replace(S, Chr(0), "")
End Function

8 楼


在C盘下新建一个文本文件,随便输入什么字串,开一个VB新工程,加一个按钮:
[code]
Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                   (ByVal hwnd As Long, ByVal lpszOp As String, _
                    ByVal lpszFile As String, ByVal lpszParams As String, _
                    ByVal LpszDir As String, ByVal FsShowCmd As Long) _
                    As Long
                    

Private Sub Command1_Click()
    ShellExecute Me.hwnd, "open", "C:\Test.TXT", vbNullString, vbNullString, SW_SHOWNORMAL
End Sub
[/code]

经测试OK。

9 楼

再一看,楼主上面列的例子和你后面所说的又不一致,我现在也不明白你要运行的是“一个文本文件”还是“一个文件的快键方式”,请说明。

快键方式也是可以的,方法不同。

10 楼

[color=green]7楼的方法正解。 Shell "rundll32.exe url.dll,FileProtocolHandler ...这种用法第一次见。btxdlibin真是功力深厚,学识渊博啊。[/color]

建立一个临时的批处理文件,在里面用start命令,可以运行一般的可执行文件,有文件关联类型的文件,快捷方式文件等。
如:
start a.txt     ::txt文件和记事本程序相关联,所以会用记事本打开a.txt
start QQ.exe.lnk           ::会直接运行QQ.exe

不妨一试
[color=red]PS:后来发现,start 后的参数加了引号就不行了,如:start "QQ.exe.lnk" 就不能正确运行,不知何故。所以,在VB里,
Shell "start " & File1.Path & "\" & File1.List(File1.ListIndex) 最好不用,一个原因就是,像"Documents and settings\这样的路径或文件名本身含有空格,会把空格后的字符当作参数,即使加引号,又不能用start命令"
建议在你要运行的文件的目录下创建一个批处理文件,然后再运行批处理文件,应该就可以了。虽然麻烦了点。[/color]

我来回复

您尚未登录,请登录后再回复。点此登录或注册