Что нового

открыть ссылку в браузере по умолчанию

D

dreamorder

Гость
:blink:
Доброго времени суток гос-да.
Помогите пожалуйста с примером.
Есть ссылка на сайт в созданном окне GUI, как её открыть в браузере, который
назначен пользователем по умолчанию?
Заранее спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
dreamorder,
Код:
ShellExecute('http://autoit-script.ru/')
 

den4ik

Новичок
Сообщения
21
Репутация
0
Добрый день..
Помогите решить следующую проблему:
при запуске
Код:
#RequireAdmin
ShellExecute('http://www.google.com')

отображается сообщение с ошибкой Class not registred

если этот код выполнить без повышения привелегий, все успешно, а вот с привелегиями не получается
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
den4ik,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

den4ik

Новичок
Сообщения
21
Репутация
0
скоро взорвется мозг)
никак не получается, перепробовал наверное все..
проблема в переадресации путей в x64 битной Windows 8, но даже вариант с

Код:
#RequireAdmin
$tValue = DllStructCreate('dword')
If @OSArch = 'X64' Then
    DllCall('kernel32.dll', 'int', 'Wow64DisableWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
EndIf
ShellExecute('http://www.google.com')
If @OSArch = 'X64' Then
    DllCall('kernel32.dll', 'int', 'Wow64RevertWow64FsRedirection', 'ptr', DllStructGetPtr($tValue))
EndIf


не приносит результата, все та же ошибка про Class Not Registred
так же пробовал вытаскивать путь к браузеру по умолчанию из реестра, без результата..

прошу помогите, вся программа упирается в этот пункт :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
den4ik
А что показывает на 64 системе этот код?
Код:
#RequireAdmin
#include <APIConstants.au3>;http://autoit-script.ru/index.php/topic,47.0.html
#include <WinAPIEx.au3>;http://autoit-script.ru/index.php/topic,47.0.html

Opt('MustDeclareVars', 1)

Global $sExt = '.html'

ConsoleWrite('Command: ' & _WinAPI_AssocQueryString($sExt, $ASSOCSTR_COMMAND) & @LF)
 

den4ik

Новичок
Сообщения
21
Репутация
0
А что показывает на 64 системе этот код?

ничего не выводит, если его выполнить без повышения привелегий, то в выводе указан мой редактор .html файлов, а браузер по умолчанию Chrome


Добавлено:
Сообщение автоматически объединено:

Код:
#RequireAdmin
#include <APIConstants.au3>;http://autoit-script.ru/index.php/topic,47.0.html
#include <WinAPIEx.au3>;http://autoit-script.ru/index.php/topic,47.0.html

Opt('MustDeclareVars', 1)

Global $sExt = 'http'

ConsoleWrite('Command: ' & _WinAPI_AssocQueryString($sExt, $ASSOCSTR_COMMAND) & @LF)


должно быть так, но опять таки, с
Код:
#RequireAdmin
нет никакого вывода


Добавлено:
Сообщение автоматически объединено:

пока решил так, видимо нет решения запуска на x64:


Код:
If $iPing1 Then
Sleep(1000)
    If @OSArch = "x86" Then
        ShellExecute("http://www.google.com/")
Else
	Local $oIE = _IECreate("www.google.com")
EndIf
	MsgBox(262208,"Состояние","Доступ в сеть Интернет работает, приятного серфинга",5)
	 
EndIf
Sleep(1000)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
den4ik,
А если так?
Код:
ConsoleWrite( _OpenUrl('http://autoit-script.ru/index.php?topic=11392.msg101779#msg101779') & @LF)

Func _OpenUrl($s_Url)
	Local $i_Pid = Run('rundll32.exe url.dll,FileProtocolHandler ' & $s_Url)
	Return ($i_Pid <> 0)
EndFunc
Или так?
Код:
ConsoleWrite(_OpenUrl_1('http://autoit-script.ru/index.php?topic=11392.msg101779#msg101779') & @LF)

Func _OpenUrl_1($s_Url)
	Local $s_UrlShortcut = @TempDir & '\~' & @YDAY * @MSEC & '.url', $i_Err = 1

	Do
		If Not IniWrite($s_UrlShortcut, 'InternetShortcut', 'URL', $s_Url) Then ExitLoop
		If Not ShellExecute($s_UrlShortcut) Then ExitLoop
		$i_Err = 0
	Until 1
	If FileExists($s_UrlShortcut) Then FileDelete($s_UrlShortcut)
	Return ($i_Err = 0)
EndFunc   ;==>_OpenUrl_1
 

den4ik

Новичок
Сообщения
21
Репутация
0
madmasles сказал(а):
den4ik,
А если так?
Код:
ConsoleWrite( _OpenUrl('http://autoit-script.ru/index.php?topic=11392.msg101779#msg101779') & @LF)

Func _OpenUrl($s_Url)
	Local $i_Pid = Run('rundll32.exe url.dll,FileProtocolHandler ' & $s_Url)
	Return ($i_Pid <> 0)
EndFunc
Или так?
Код:
ConsoleWrite(_OpenUrl_1('http://autoit-script.ru/index.php?topic=11392.msg101779#msg101779') & @LF)

Func _OpenUrl_1($s_Url)
	Local $s_UrlShortcut = @TempDir & '\~' & @YDAY * @MSEC & '.url', $i_Err = 1

	Do
		If Not IniWrite($s_UrlShortcut, 'InternetShortcut', 'URL', $s_Url) Then ExitLoop
		If Not ShellExecute($s_UrlShortcut) Then ExitLoop
		$i_Err = 0
	Until 1
	If FileExists($s_UrlShortcut) Then FileDelete($s_UrlShortcut)
	Return ($i_Err = 0)
EndFunc   ;==>_OpenUrl_1

к сожалению результат тот же..с правами администратора не работает / без прав администратора работает
в консоле: >Exit code: 0 Time: 1.597
 

den4ik

Новичок
Сообщения
21
Репутация
0
второй пример выдает все тот же "Class not registered"
 

erlik

Продвинутый
Сообщения
317
Репутация
84
den4ik
видимо нет решения запуска на x64
Проблема похоже только в вашей винде. У меня на 8.1 x64 все работает. И редирект тут вообще не причем.
И еще - протокол http должен быть ассоциирован с браузером по умолчанию.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
den4ik сказал(а):
Проверил на 3.3.8.1, без результата.."class not registered" :stars:
Не понимаю, почему так. :shok:
Скорей всего прав erlik, какие-то у Вас проблемы с ассоциациями файлов.
 

maximax

Новичок
Сообщения
6
Репутация
0
erlik сказал(а):
den4ik
видимо нет решения запуска на x64
Проблема похоже только в вашей винде. У меня на 8.1 x64 все работает. И редирект тут вообще не причем.
И еще - протокол http должен быть ассоциирован с браузером по умолчанию.

Подтверждаю. Сейчас специально проверил в виртуалке на 64-битной 8-ке, всё ок.
Думаю стоит посмотреть:
HKEY_CURRENT_USER\Software\Classes\http\shell\open\command
 

den4ik

Новичок
Сообщения
21
Репутация
0
Действительно, проблема скрывалась в ветке HKEY_CURRENT_USER\Software\Classes\http\shell\open\command
Некорректно был утсановлен браузер Opera
Ручками прописал там другой браузер и все открылось нормально,
Спасибо за помощь
 

Shinoby

Новичок
Сообщения
81
Репутация
2
А при чем тогда был #RequireAdmin??? Вопрос не праздный, так как в этот дескриптор много чего упирается...
 
Верх