如果默认为Chrome或IE,ShellExecute会挂起打开新的浏览器窗口

kja*_*ack 2 vb6 shellexecute default-browser

我使用此代码(来自MSDN)打开默认浏览器.

Private 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 Command1_Click()
   Dim r As Long
   r = ShellExecute(0, "open", "http://www.microsoft.com", 0, 0, 1)
End Sub
Run Code Online (Sandbox Code Playgroud)

它仅适用于IE和chrome,如果一个实例已经打开,它只是广告一个标签并返回所请求的页面.

如果没有实例已经打开,则会创建一个新实例但页面永远不会加载并最终超时.

只有firefox似乎在两种情况下都能正常工作.

然后我尝试了一种技术(在此详述),我在其中创建了一个临时的htm文件,以便查找关联的应用程序,然后使用下面的一个Shell调用来查看:

Shell "C:\Program Files\Internet Explorer\iexplore.exe https://www.google.co.uk/", vbNormalFocus

 Shell "C:\Program Files\Mozilla Firefox\firefox.exe https://www.google.co.uk/", vbNormalFocus

 Shell "C:\Users\Kjack\AppData\Local\Google\Chrome\Application\chrome.exe https://www.google.co.uk/", vbNormalFocus
Run Code Online (Sandbox Code Playgroud)

这次FF和IE都工作,但chrome仍然有同样的问题.

有谁知道解决这个问题?

编辑添加有关操作系统和浏览器版本的详细信息:

操作系统:Windows Vista Home Basic 32位

FireFox 20.0.1

IE 9.0.8112.16421

Opera 12.15 Build 1748

镀铬26.0.1410.64米

Bob*_*b77 7

自从Win2k&Me到达之后,你也有了一个干净的基于COM的界面.它提供Unicode支持,无需旋转:

Shell.ShellExecute方法

    With CreateObject("Shell.Application")
        .ShellExecute "http://www.microsoft.com"
    End With
Run Code Online (Sandbox Code Playgroud)

该示例允许所有可选参数(包括动词)默认.正如肯·怀特在答案中已经指出的那样,你希望动词在这种情况下是默认的.