WinXP下使用ShellExecute执行lnk快捷方式的问题!!!

roger_xiong 2004-12-11 11:17:26
代码如下:
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub lvwMain_DblClick()
If Not lvwMain.SelectedItem Is Nothing Then
ShellExecute Me.hWnd, vbNullString, "d:\1.lnk", gblnTry, vbNullString, 1
End If
End Sub

-------------------------------------------------------
在其他系统中运行一切正常,在某些XP下运行也很正常,可是后来用户反应他们的XP上运行不了,注意了一下,确实有一些XP运行不了上面的代码,一点错误提示都没有,可是就是不能调用快捷方式,但是如果同样的语句调用其他文件,那有一切正常,晕倒了~~~

查了一下CSDN以前的帖子,也有朋友问到一样的问题,可惜好像都说不出一个所以然来,更谈不上解决问题了,不知道现在那位朋友知道上面的问题的原因和解决方法的???


可以看看网友的其他帖子,一摸一样的问题:
http://search.csdn.net/Expert/topic/2167/2167068.xml?temp=.552395
...全文
326 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
理论用shellexecute最后一个参数用SW_HIDE都可以不显示出IE窗口的嘛,难道不行?

郁闷的是,我的XP机上竟然用SHELLEXECUTE不能直接打开"http://xxx.com",提示路径找不到,郁闷
连"运行"菜单也不行.
而"运行"菜单里行的"iexplore http://xxx.com",用shellexecute也不行,提示文件找不到,超郁闷:(
viena 2004-12-13
  • 打赏
  • 举报
回复
楼主难到没有看见dongge2000的回复吗?
dongge2000贴的代码是看LNK文件的对象地址而直接SHELL它的。
snowhillxj 2004-12-13
  • 打赏
  • 举报
回复
我碰到过类似问题,其实你只需要在快捷方式的路径上直接写上你需要调用的程序就可以,不要用快捷方式。我看了一下,在XP和Win2K里面,快捷方式没有*.lnk的文件名,这应该是原因吧。
dongge2000 2004-12-13
  • 打赏
  • 举报
回复
楼主难到没有看见我的回复吗?
我贴的代码是看LNK文件的对象地址而直接SHELL它的。
roger_xiong 2004-12-13
  • 打赏
  • 举报
回复
谢谢,楼上的朋友,但是一个shell32.dll很大,尽8Mb,所以我没有试你上面的方法。不过我查看了MSDN上面有篇文章:http://support.microsoft.com/?kbid=837633提到这个问题。

我看过后觉得,这个错误似乎和shell32.dll有密切的关系,因为ShellExecute正式里面的函数,而我查看了不能使用该函数的XP系统,发现他们的 shell32.dll 版本普遍是比较低的,当然还有其他几个文件也有关系。

Date Time Version Size File name Platform
------------------------------------------------------------------------
02-Apr-2004 03:15 6.0.2800.1502 8,348,672 Shell32.dll x86
01-Apr-2004 23:10 5.1.2600.1363 676,864 Sxs.dll x86
10-Mar-2004 17:59 5.1.2600.1363 593,408 Xpsp2res.dll x86
01-Apr-2004 23:10 6.0.2800.1361 921,600 Comctl32.dll x86
01-Apr-2004 23:10 1,812 Controls.man x86
01-Apr-2004 23:10 621 Comctl.man x86


上面是微软的列表,对比了一下发现用户上诉的文件有部分或全部版本更低,主要是shell32.dll,然后让该用户通过windows update更新系统后,问题解决~

其他用户还没有测试~估计也是可以这样子解决的。


roger_xiong 2004-12-13
  • 打赏
  • 举报
回复
snowhillxj(snow) :xp和2000里面的快捷方式有lnk的扩展名啊,这个不是原因。
roger_xiong 2004-12-13
  • 打赏
  • 举报
回复
呵呵,对不起,我看到了,我上面的帖子上写了“谢谢,楼上的朋友”啊,就是谢谢上面所有答复的朋友,dongge2000的代码很好啊,能够解决问题,首先真的非常感谢他的回复。

可是我讨论的是ShellExecute再在Winxp下的问题哦,我只是想知道why?

找找不行的原因?为什么有些xp可以,有些不行~
roger_xiong 2004-12-12
  • 打赏
  • 举报
回复
嗨~真是有一点郁闷~XP好像都是问题比较多的系统,2000下可以正常运行的程序到了XP中,仍然有可以能遇到很奇怪的问题,不知道朋友们是不是有同感?

上面的问题请大家不吝赐教~在下疑问的很~ 大家可以互相讨论,互相学习一下~ 有经验的要拿出来大家学习一下。
tztz520 2004-12-12
  • 打赏
  • 举报
回复
你这样试一下吧.
将你机子上的那个shell32.dll拷过去.


Public Declare Function ShellExecute Lib "f:\shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long'定义成你那个shell32.dll的路径
roger_xiong 2004-12-12
  • 打赏
  • 举报
回复
自己Up
dongge2000 2004-12-12
  • 打赏
  • 举报
回复
另一种方法。
Option Explicit

Private Sub Command1_Click()
Shell GetTargetPath("C:\Documents and Settings\MyUserName\桌面\RealOne.lnk")
End Sub

Function GetTargetPath(ByVal FileName As String)
Dim Obj As Object
Dim Shortcut As Object
Set Obj = CreateObject("WScript.Shell")
Set Shortcut = Obj.CreateShortcut(FileName)
GetTargetPath = Shortcut.TargetPath
Shortcut.Save
End Function
viena 2004-12-11
  • 打赏
  • 举报
回复
唔知 -_-#

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧