主题:快捷方式不能运行
q995852111
[专家分:260] 发布于 2008-01-13 18:07:00
ShellExecute Me.hwnd, "open", App.Path & "\Add\" & List7.Text, vbNullString, vbNullString, 0
App.Path & "\Add\" & List7.Text 是Add文件夹内的所有文件列表
如上面所说,运行exe文件没有问题,可是运行lnk文件就不行了,请教该怎么解决?
回复列表 (共17个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-01-13 18:12:00
快捷方式本就不是可执行文件!
板凳
q995852111 [专家分:260] 发布于 2008-01-13 18:18:00
那么该怎么让他运行呢?
我想应该有能直接运行的方法,我在网上查了一些,不过我试了,都不能运行lnk文件!
如果要获取文件的实际地址再运行,感觉就太过分了.........
3 楼
q995852111 [专家分:260] 发布于 2008-01-13 18:20:00
查的最多的2个方法:
1: start + LNK文件 ,试过了,不行
2:Shell "rundll32.exe url.dll,FileProtocolHandler " & App.Path & "\Add\" & List7.Text, vbHide 这样也是只能运行exe文件!
4 楼
老大徒伤悲 [专家分:29120] 发布于 2008-01-13 18:56:00
你试试看这个:
She11 "Rundll32.exe url.dll, FileProtocolHandler X"
X代表要运行的文件,包括路径
5 楼
q995852111 [专家分:260] 发布于 2008-01-13 19:12:00
已经试了,不可以的!!!!!!!
6 楼
老大徒伤悲 [专家分:29120] 发布于 2008-01-13 19:37:00
那就找api函数看看
7 楼
btxdlibin [专家分:2430] 发布于 2008-01-14 08:32:00
如果文件名太长,转化成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 楼
华山论剑 [专家分:5310] 发布于 2008-01-14 08:59:00
在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 楼
华山论剑 [专家分:5310] 发布于 2008-01-14 09:02:00
再一看,楼主上面列的例子和你后面所说的又不一致,我现在也不明白你要运行的是“一个文本文件”还是“一个文件的快键方式”,请说明。
快键方式也是可以的,方法不同。
10 楼
天天学习 [专家分:4570] 发布于 2008-01-14 12:57:00
[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]
我来回复