2

我使用此代码(来自 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 可以正常工作。

然后,我尝试了一种技术(在此处详细介绍),在该技术中,我创建了一个临时 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 位

火狐 20.0.1

即 9.0.8112.16421

歌剧 12.15 构建 1748

铬 26.0.1410.64 m

4

3 回答 3

7

自从 Win2k & Me 出现以来,您还拥有一个干净的基于 COM 的界面。它提供了 Unicode 支持而无需旋转:

Shell.ShellExecute 方法

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

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

于 2013-04-19T05:46:47.200 回答
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 资源管理器中右键单击文件来查看文件的默认操作。默认操作是以粗体文本显示的上下文菜单顶部的操作。

于 2013-04-19T01:44:26.630 回答
1

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

VB6:

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

或者试试这个:

Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
Call objShell.Run("explorer """ & sURL & """", vbNormalFocus)
于 2014-07-07T19:55:09.010 回答