2013-04-19 1 views
2

Я использовал этот код (из MSDN), чтобы открыть браузер по умолчанию.ShellExecute висит, открывая новое окно браузера, если по умолчанию это Chrome или IE

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 и хрома, только если экземпляр уже открыт, он тогда только объявления вкладки и возвращает запрошенную страницу.

Если экземпляр уже не открыт, создается новый, но страница никогда не загружается и, в конечном итоге, отключается.

Только 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 работали, но хром по-прежнему имел ту же проблему.

Кто-нибудь знает об этом?

EDIT, чтобы добавить сведения о ОС и браузер версии:

ОС: Windows Vista Home Basic 32-разрядная

FireFox 20.0.1

IE 9.0.8112.16421

Opera 12,15 Строй 1748

Хром 26.0.1410.64 м

+0

Как вы подозреваете конкретный браузер, не могли бы вы предоставить более подробную информацию о вашей среде: OS версии, версии браузеров ? –

+0

@ ИльяКурносов. Спасибо за ваше предложение, я только что сделал это – kjack

+0

@IlyaKurnosov Извините, что мои последние комментарии были не очень ясными. Я хочу сказать, что я отредактировал свой вопрос согласно вашему предложению. – kjack

ответ

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. Действие по умолчанию - это то, что находится в верхней части контекстного меню, которое отображается в жирным шрифтом.

+0

К сожалению, оставив глагол пустым, ничего не изменилось. Также, как это происходит, действие по умолчанию для chrome на моем компьютере «открыто». Спасибо, я не знал этого совета. Я попытался удалить и переустановить хром, но это не имело никакого значения, хотя на этот раз хром был установлен под программными файлами. Я также установил Opera, и это работает отлично. Так что это вопрос хрома? – kjack

7

С Win2k & У меня также есть чистый COM-интерфейс для этого. Он поддерживает Unicode без циркуляций:

Shell.ShellExecute method

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

Этого пример позволяет всем необязательные параметры (в том числе и глагол) по умолчанию. Как уже указывалось в ответе Кена Уайта, вы хотите, чтобы глагол был по умолчанию в этом случае.

+0

Это отлично работает для Internet Explorer, Firefox и Opera, но хром все еще проявляет те же симптомы даже после удаления/переустановки. Это очень разочаровывает, потому что похоже, что я не смогу просто вызвать браузер по умолчанию (хром говорит пользователю, что мой сайт не отвечает), который будет раздражать людей, чей браузер по умолчанию не является Internet Explorer. Кроме того, загрузка Opera была крошечной по сравнению с хром и, глядя на мои установленные программы, chrome использует примерно в 6 раз больше места на диске, чем Opera или Firefox. – kjack

1

Это откроет браузер по умолчанию (например,Хром) без подвешивания:

VB6:

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

Или попробуйте это:

Dim objShell As Object 
Set objShell = CreateObject("WScript.Shell") 
Call objShell.Run("explorer """ & sURL & """", vbNormalFocus) 
Смежные вопросы