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

时间:2013-04-19 00:59:14

标签: 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

只有当一个实例已经打开时,它才适用于IE和Chrome,它只是广告一个标签 并返回请求的页面。

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

在这两种情况下,只有firefox似乎正常。

然后我尝试了一种技术(详细here),我在其中创建了一个临时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

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

有没有人知道这方面的解决方案?

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

操作系统:Windows Vista Home Basic 32位

FireFox 20.0.1

IE 9.0.8112.16421

Opera 12.15 Build 1748

Chrome 26.0.1410.64 m

3 个答案:

答案 0 :(得分:7)

自Win2k&我到了你也有一个干净的基于COM的界面。它提供Unicode支持而无需旋转:

Shell.ShellExecute method

    With CreateObject("Shell.Application")
        .ShellExecute "http://www.microsoft.com"
    End With

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

答案 1 :(得分:2)

您的代码假设有一个open谓词分配给http:协议,并且无法保证它已经被浏览器安装。

相反,只需将动词留空即可。如果您未指定,则Windows将使用协议或文件关联的默认操作。

Private Sub Command1_Click()
   Dim r As Long
   r = ShellExecute(0, "", "http://www.microsoft.com", 0, 0, 1)
End Sub

提示:通过在Windows资源管理器中右键单击文件,可以查看文件的默认操作。默认操作是上下文菜单顶部的操作,以粗体文本显示。

答案 2 :(得分:1)

这将打开默认浏览器(例如Chrome)而不会挂起:

VB6:

Call Shell("explorer """ & sURL & """", vbNormalFocus)

或试试这个:

Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
Call objShell.Run("explorer """ & sURL & """", vbNormalFocus)