代码如下:
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 LongPrivate 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

解决方案 »

  1.   

    嗨~真是有一点郁闷~XP好像都是问题比较多的系统,2000下可以正常运行的程序到了XP中,仍然有可以能遇到很奇怪的问题,不知道朋友们是不是有同感?上面的问题请大家不吝赐教~在下疑问的很~ 大家可以互相讨论,互相学习一下~ 有经验的要拿出来大家学习一下。
      

  2.   

    你这样试一下吧.
    将你机子上的那个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的路径
      

  3.   

    另一种方法。
    Option ExplicitPrivate Sub Command1_Click()
        Shell GetTargetPath("C:\Documents and Settings\MyUserName\桌面\RealOne.lnk")
    End SubFunction 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
      

  4.   

    谢谢,楼上的朋友,但是一个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更新系统后,问题解决~其他用户还没有测试~估计也是可以这样子解决的。
      

  5.   

    楼主难到没有看见我的回复吗?
    我贴的代码是看LNK文件的对象地址而直接SHELL它的。
      

  6.   

    我碰到过类似问题,其实你只需要在快捷方式的路径上直接写上你需要调用的程序就可以,不要用快捷方式。我看了一下,在XP和Win2K里面,快捷方式没有*.lnk的文件名,这应该是原因吧。
      

  7.   

    楼主难到没有看见dongge2000的回复吗?
    dongge2000贴的代码是看LNK文件的对象地址而直接SHELL它的。
      

  8.   

    呵呵,对不起,我看到了,我上面的帖子上写了“谢谢,楼上的朋友”啊,就是谢谢上面所有答复的朋友,dongge2000的代码很好啊,能够解决问题,首先真的非常感谢他的回复。可是我讨论的是ShellExecute再在Winxp下的问题哦,我只是想知道why?找找不行的原因?为什么有些xp可以,有些不行~
      

  9.   

    snowhillxj(snow) :xp和2000里面的快捷方式有lnk的扩展名啊,这个不是原因。
      

  10.   

    理论用shellexecute最后一个参数用SW_HIDE都可以不显示出IE窗口的嘛,难道不行?郁闷的是,我的XP机上竟然用SHELLEXECUTE不能直接打开"http://xxx.com",提示路径找不到,郁闷
    连"运行"菜单也不行.
    而"运行"菜单里行的"iexplore http://xxx.com",用shellexecute也不行,提示文件找不到,超郁闷:(