我使用此代码(来自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
答案 0 :(得分:7)
自Win2k&我到了你也有一个干净的基于COM的界面。它提供Unicode支持而无需旋转:
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)