1 (изменено: exobangs, 2015-04-23 00:04:17)

Тема: AHK: Проверка интернет соединения

Как проверить подключение к интернету?
Если можно то самый простой способ.
На данный момент проверяю так:


loop {
Start:
Код...
Ping(strHost) 
{ 
     Loop 4 
        bRet := ComObjGet("winmgmts:").Get("Win32_PingStatus.address='" . strHost . "'").StatusCode = 0 
     until bRet 
     return bRet 
}

 if !Ping("microsoft.com") 
     { 
        Goto, Start 
     }
 Else { 
код...
}
}

Но что то не пойму по какой причине он не может пингануть сайт Microsoft и возвращается к старту , хотя интернет есть

2

Re: AHK: Проверка интернет соединения

Пингуйте www.microsoft.com.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Проверка интернет соединения

Я так делаю:

ComObjError(false)
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "http://microsoft.com")
HTTP.Send()
if (HTTP.ResponseText = "")
   msgbox интернета нет

4

Re: AHK: Проверка интернет соединения

MsgBox, % ConnectedToInternet() ? "connected" : "not connected"


ConnectedToInternet(flag=0x40) { ; by SKAN
   Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0)
}
Как сказал мой дед - Я твой дед

5

Re: AHK: Проверка интернет соединения

Похожая тема AHK: индикатор интернет (иконка работает/не работает в трее).

6 (изменено: exobangs, 2015-04-23 11:04:11)

Re: AHK: Проверка интернет соединения

Malcev пишет:

Я так делаю:

ComObjError(false)
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "http://microsoft.com")
HTTP.Send()
if (HTTP.ResponseText = "")
   msgbox интернета нет

Хм не плохо , мне нравится , спасибо.


sergeiplugatyr, Не смог заточить под себя.

ypppu, Довольно долгая проверка.

Есть ещё какие нибудь способы?

7 (изменено: Irbis, 2015-04-23 11:04:26)

Re: AHK: Проверка интернет соединения

Логично объединить индикатор в трее с методом из #4.
Извиняюсь, что в одну строчку. )

Loop
   Menu, Tray, Icon, Shell32.dll, % DllCall("Sleep", UInt, 1000)||(DllCall("Wininet.dll\InternetGetConnectedState", "Str", 0x40,"Int",0)) ? 14:110, 1

8

Re: AHK: Проверка интернет соединения

Возврат InternetGetConnectedState истины не гарантирует, что существует реальное подключение к сети. Оно лишь показывает, что модем или LAN активны. Надёжнее пинговать конкретный узел сети. Ещё так можно:

MsgBox, % DllCall("Wininet\InternetCheckConnection", Str, "https://www.microsoft.com/", UInt, FLAG_ICC_FORCE_CONNECTION := 1, UInt, 0)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Проверка интернет соединения

Через пинг:

RunWait, ping.exe www.microsoft.com,, Hide UseErrorlevel
If Errorlevel
   msgbox интернета нет

10

Re: AHK: Проверка интернет соединения

Через InternetCheckConnection вроде быстрее. Если есть соединение, она сразу возвращает true. Для сравнения:

MsgBox, % DllCall("Wininet\InternetCheckConnection", Str, "https://www.microsoft.com/", UInt, FLAG_ICC_FORCE_CONNECTION := 1, UInt, 0)

RunWait, ping.exe www.microsoft.com,, Hide UseErrorlevel
MsgBox, % !Errorlevel
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Проверка интернет соединения

Просто пинг отправляет 4 запроса. если вписать 1, то вроде как одинаково.

MsgBox, % DllCall("Wininet\InternetCheckConnection", Str, "https://www.microsoft.com/", UInt, FLAG_ICC_FORCE_CONNECTION := 1, UInt, 0)

RunWait, ping.exe www.microsoft.com -n 1,, Hide UseErrorlevel
MsgBox, % !Errorlevel

12

Re: AHK: Проверка интернет соединения

Проверять соединение кажется более надежным, но у меня и так стабильно показывает состояние.
Сменил параметр проверки на 0x20 = INTERNET_CONNECTION_OFFLINE.
У кого-нибуль есть ситуации, когда этот код показывает соединение при фактически неработающем интернете?

MsgBox, % DllCall("Wininet.dll\InternetGetConnectedState", "Str", 0x20,"Int",0)

13

Re: AHK: Проверка интернет соединения

Смотря, что понимать под "интернетом". Локальная сеть — тоже "интернет".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Проверка интернет соединения

У кого-нибуль есть ситуации, когда этот код показывает соединение при фактически неработающем интернете?

У меня при подключенном роуте и отключенном от него интернете показывает 1.

15

Re: AHK: Проверка интернет соединения

Вообще кроме "есть" и "нет" существуют другие состояния. Интернет доступен, но DNS не пашет. Или интернет частично доступен.

16

Re: AHK: Проверка интернет соединения

Да, есть такой момент, при отключенном от роутера кабеле все равно выводит 1.
Все равно как-то не нравится способ с постоянным "пинанием" внешнего адреса, хочется найти способ, как обойтись опросом внутреннего состояния ОС.

17

Re: AHK: Проверка интернет соединения

А как по "внутреннему состоянию ОС" можно отличить подключение к интернету от подключения к локальной сети? У меня, например, подключение осуществляется не напрямую, а через локальную сеть провайдера.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Проверка интернет соединения

Irbis пишет:
MsgBox, % DllCall("Wininet.dll\InternetGetConnectedState", "Str", 0x20,"Int",0)

Немного странно этой функцией пользуетесь. Надо как-то так:

state := DllCall("Wininet\InternetGetConnectedState", IntP, flags, Int, 0)
for k, v in { INTERNET_CONNECTION_CONFIGURED: 0x40
            , INTERNET_CONNECTION_LAN: 0x2
            , INTERNET_CONNECTION_MODEM: 0x1
            , INTERNET_CONNECTION_OFFLINE: 0x20
            , INTERNET_CONNECTION_PROXY: 0x4
            , INTERNET_RAS_INSTALLED: 0x10 }
   if (flags & v)
      list .= k . "`n"
   
MsgBox, % "state = " state "`nflags:`n" Trim(list, "`n")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Проверка интернет соединения

А есть ли решения для определения работоспособности прокси, кроме как через WinHttpRequest?

20 (изменено: Drugoy, 2015-10-23 04:56:13)

Re: AHK: Проверка интернет соединения

Через установку прокси и попытку UrlDownloadToFile.

21

Re: AHK: Проверка интернет соединения

Не, это не вариант - еще тормознутей выйдет.

22

Re: AHK: Проверка интернет соединения

Ну а как можно проверить работоспособность прокси, кроме как попробовав применить его?
Никак.

23 (изменено: Key, 2016-06-03 18:00:24)

Re: AHK: Проверка интернет соединения

Весь процесс ping будет в буфере и все по русски и без каракуль

+ открыть спойлер

clipboard:=
RunWait %comspec% /c chcp 65001 && ping ya.ru -n 1 | cb.exe
MsgBox, %clipboard%

Еще проще.

+ открыть спойлер

#Persistent
RunWait, ping.exe ya.ru -n 1,, Hide UseErrorlevel
if Errorlevel=1
{
MsgBox, Pinng проходит
;вместо MsgBox мотет быть Run и т.д
}

return

24

Re: AHK: Проверка интернет соединения

Предлагаю другой пример

result	:=  ComObjCreate("WScript.Shell").Exec("cmd.exe /q /c chcp 65001 && ping ya.ru -n 1").StdOut.ReadAll()

дальше можно выщемить только цифру time или TTL, чтобы в дальнейшем сравнивать/обрабатывать..., все по русски и без каракуль, можно поставить в цикл и не будет постоянно создаваться файл.

    	Loop, parse, result, `n `r
   	 {
		IfInString, A_LoopField, time= 
		{
			var:=A_LoopField
			StringReplace, var, var, time=, , All
			StringReplace, var, var, ms, , All
			MsgBox, %var%
		}
   	 }
return