Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Наилучший способ проверки наличия интернета

Ответить
Настройки темы
Наилучший способ проверки наличия интернета

Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Я знаю 3 способа проверки наличия интернета, может кто знает ещё какой-нибудь?
И какой из них самый оптимальный?

1. Вернуть IP адресс, и если он НЕ равен -1, то инет есть. (долгий)
2. Пинговать google.com или какой-нибудь другой глобальный сервер (я считаю что этот самый оптимальный. ИМХО)
3. _WinAPI_IsNetworkAlive

Вот о последнем хотел узнать поподробнее..., как эта функция проверяет наличие интернета? Тоже пингует? Или как?

_________________________________добавил__________________________________
если _getIP использовать с повторением в 5-10 сек, он не нагрузит интернет? Или как нибудь косвенно повлияет на систему?

-------
Ну вы ребята даёте...


Отправлено: 14:26, 27-02-2010

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата sashadeg:
как эта функция проверяет наличие интернета »
Откройте C:\Program Files\AutoIt3\Include\WinAPIEx.au3 и найдите нужную Вам функцию.
По-моему, _WinAPI_IsNetworkAlive самый оптимальный способ.

Отправлено: 15:52, 27-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата madmasles:
Откройте C:\Program Files\AutoIt3\Include\WinAPIEx.au3 »
Я в том мало что понимаю

Просто если стандартные экранчики в трее показывают наличие интернета, то это не значит что он есть
Может эта функция берёт инфу из windows? значит не факт

-------
Ну вы ребята даёте...


Отправлено: 16:14, 27-02-2010 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Есть вот такой вариант:

Код: Выделить весь код
$Connected = IsConnected()

If Not $Connected Then
    MsgBox(0,"","Соединение отсутствует" & @LF & $Connected)
Else
    MsgBox(0,"","Соединение установлено [" & $Connected & "]")
EndIf

Func IsConnected($sPingHost="google.com", $iPingTimeOut=1000)
    Local $iPing_Results = Ping($sPingHost, $iPingTimeOut)
    If $iPing_Results > 0 Then Return $iPing_Results

    Local $hWinInetDll = DllOpen("wininet.dll")
    If $hWinInetDll = -1 Then Return SetError(1, 0, -1)

    Local $aRet = DllCall($hWinInetDll, "int", "InternetGetConnectedState", "int", 0, "int", 0)
    DllClose($hWinInetDll)

    If IsArray($aRet) Then
        $aRet = $aRet[0]
    Else
        $aRet = 0
    EndIf

    If $aRet And $iPing_Results <= 0 Then Return 0

    Return $aRet
EndFunc
Вот тут есть ещё пример.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:29, 27-02-2010 | #4


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Creat0R, прикольный скрипт, но Вы сможете рассказать плюсы и минусы этого способа?
Вижу подключается wininet.dll, что он делает?

-------
Ну вы ребята даёте...


Отправлено: 07:05, 28-02-2010 | #5


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


sashadeg,
Вот еще тема:Проверка на подключение к интернету WAN

Цитата sashadeg:
Вижу подключается wininet.dll, что он делает? »
Есть бесплатная утилита от NirSoft, в которой можно посмотреть функции в dll: DLL Export Viewer v1.36

Последний раз редактировалось madmasles, 28-02-2010 в 11:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:39, 28-02-2010 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата sashadeg:
плюсы и минусы этого способа»
Не знаю на счёт минусов, но плюс в том что проверяется подключение более надёжно - сначала проверяется Ping, а затем (если он неудачно отработал) проверяется состояние подключения сети.

Цитата sashadeg:
ижу подключается wininet.dll, что он делает? »
Используя эту dll вызывается функция «InternetGetConnectedState», которая проверяет тип подключения к сети.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:58, 28-02-2010 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вот сделал пример отображающий состояние подключения в GUI (на основе этого примера на vb):

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$aConnection_State = _InternetGetConnectedState()

GUICreate("_InternetGetConnectedState", 270, 320)

GUICtrlCreateLabel("Connected via MODEM:", 20, 20)
GUICtrlCreateInput($aConnection_State[1][0], 150, 17, 100)

GUICtrlCreateLabel("Connected via LAN:", 20, 50)
GUICtrlCreateInput($aConnection_State[2][0], 150, 47, 100)

GUICtrlCreateLabel("Connected via PROXY:", 20, 80)
GUICtrlCreateInput($aConnection_State[3][0], 150, 77, 100)

GUICtrlCreateLabel("Modem busy:", 20, 110)
GUICtrlCreateInput($aConnection_State[4][0], 150, 107, 100)

GUICtrlCreateLabel("Connection RAS installed:", 20, 140)
GUICtrlCreateInput($aConnection_State[5][0], 150, 137, 100)

GUICtrlCreateLabel("Connection is offline:", 20, 170)
GUICtrlCreateInput($aConnection_State[6][0], 150, 167, 100)

GUICtrlCreateLabel("Connection description:", 20, 200)
GUICtrlCreateEdit("", 20, 220, 230, 80, $ES_WANTRETURN)

For $i = 1 To $aConnection_State[0][0]
    If $aConnection_State[$i][0] Then GUICtrlSetData(-1, "* " & $aConnection_State[$i][1] & @CRLF, 1)
Next

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _InternetGetConnectedState()
    Local Const $INTERNET_CONNECTION_MODEM          = 0x1 ;Local system uses a modem to connect to the Internet.
    Local Const $INTERNET_CONNECTION_LAN            = 0x2 ;Local system uses a local area network to connect to the Internet.
    Local Const $INTERNET_CONNECTION_PROXY          = 0x4 ;Local system uses a proxy server to connect to the Internet.
    Local Const $INTERNET_CONNECTION_MODEM_BUSY     = 0x8 ;No longer used.
    Local Const $INTERNET_RAS_INSTALLED             = 0x10 ;Remote Access Services are installed on this system.
    Local Const $INTERNET_CONNECTION_OFFLINE        = 0x20 ;Local system is in offline mode.
    Local Const $INTERNET_CONNECTION_CONFIGURED     = 0x40 ;Local system has a valid connection to the Internet, but it might or might not be currently connected.

    Local $aRetState[7][2] = [[UBound($aRetState)-1]]
    Local $aRet = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int*", 0, "int", 0)

    ;For AutoIt < 3.2.10.0 the next line should be used
    ;Local $aRet = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)

    If UBound($aRet) > 0 And $aRet[0] Then
        $aRetState[1][0] = BitAND($aRet[1], $INTERNET_CONNECTION_MODEM) <> 0
        $aRetState[1][1] = "The local system uses a modem to connect to the Internet."

        $aRetState[2][0] = BitAND($aRet[1], $INTERNET_CONNECTION_LAN) <> 0
        $aRetState[2][1] = "The local system connects to the Internet via a LAN"

        $aRetState[3][0] = BitAND($aRet[1], $INTERNET_CONNECTION_PROXY) <> 0
        $aRetState[3][1] = "The local system uses a proxy server to connect to the Internet."

        If $aRetState[3][0] Then
            $aRetState[2][1] &= ", and uses a proxy server."
        Else
            $aRetState[2][1] &= "."
        EndIf

        $aRetState[4][0] = BitAND($aRet[1], $INTERNET_CONNECTION_MODEM_BUSY) <> 0
        $aRetState[4][1] = "The local system's modem is busy with a non-Internet connection."

        $aRetState[5][0] = BitAND($aRet[1], $INTERNET_RAS_INSTALLED) <> 0
        $aRetState[5][1] = "Remote Access Services are installed on this system."

        $aRetState[6][0] = BitAND($aRet[1], $INTERNET_CONNECTION_OFFLINE) <> 0
        $aRetState[6][1] = "The connection is currently offline."
    Else
        Return SetError(1, 0, _WinAPI_GetLastErrorMessage())
    EndIf

    Return $aRetState
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:39, 28-02-2010 | #8


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Creat0R,
"Ругается" :
Цитата:
WARNING: $aRetState: possibly used before declaration.
Добавил в начале
Код: Выделить весь код
Dim $aRetState
перестала "ругаться", работает

Отправлено: 17:05, 28-02-2010 | #9


Аватара для sashadeg

Старожил


Сообщения: 379
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
проверяется подключение более надёжно - сначала проверяется Ping, а затем (если он неудачно отработал) проверяется состояние подключения сети. »
Вот именно это я щас проверил, если ввожу вместо "google.ru" какой-нибудь не сушествующий адрес (чтобы не пропинговало) то всё-равно показывает, будто нету инета.

Может попробовать пропинговать, если пинг не удался, то вернуть IP. А если пинг удался, то сразу показать что инет есть, без возврашения IP?

-------
Ну вы ребята даёте...


Отправлено: 19:39, 28-02-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Наилучший способ проверки наличия интернета

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Проверка наличия соединения с интернетом (*.vbs) BadAngel Скриптовые языки администрирования Windows 9 18-04-2011 12:06
Интернет - [решено] Какой тип сети наилучший и "найбыстрейший"? flev45 Microsoft Windows 7 6 25-11-2009 02:06
CMD/BAT - Проверка наличия диска в дисководе по папке MedVetoff Скриптовые языки администрирования Windows 8 27-08-2009 16:55
[решено] Определение наличия рисунка System Failure Вебмастеру 4 15-02-2009 01:02
[решено] Проверка наличия поля в таблице БД Artem-Samsung Вебмастеру 8 19-03-2008 21:40




 
Переход