Что нового

[Сеть, интернет] Помогите правильно написать функцию.

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1

Хочу объединить несколько функций. Если по отдельности, т.е. только в таком виде:
Код:
#include <WinAPIEx.au3>

$sHost = 'www.google.ru'
$iTime = 4000
$iN = 4

If _Ping_Number($sHost, $iTime, $iN) = @error Then
			TrayTip ( "Проверка на наличие соединения с интернет", "Соединение с интернет не обнаружено, завершаю работу.", 3 , 1)
		 MsgBox(16+262144, 'Error', "Соединение с интернет отсутствует!")
	Exit
	Else
		 TrayTip ( "Этап инициализации.", "Соединение с интернет обнаружено." & @LF & "Продолжаю работу.", 3 , 1)
		 Sleep(5000)
	EndIf
	Exit
if _WinAPI_IsNetworkAlive() = @error Then
			TrayTip ( "Проверка на наличие соединения с интернет", "Соединение с интернет не обнаружено, завершаю работу.", 3 , 1)
		 MsgBox(16+262144, 'Error', "Соединение с интернет отсутствует!")
	Exit
	Else
		 TrayTip ( "Этап инициализации.", "Соединение с интернет обнаружено." & @LF & "Продолжаю работу.", 3 , 1)
		 Sleep(5000)
	EndIf
	Exit
Func _Ping_Number($sHostName, $iTimeOut = 8000, $iNumber = 4)
    Local $iPing
    For $i = 1 To $iNumber
        $iPing = Ping($sHostName, $iTimeOut)
        If Not @error Then ExitLoop
    Next
    If @error Then
        Return SetError(@error)
    Else
        Return SetError(0, $iPing, 1)
    EndIf
EndFunc

То все работает как надо. Но если я включаю эту проверку в свой скрипт:

Код:
#include <WinAPIEx.au3>

$sHost = 'www.google.ru'
$iTime = 4000
$iN = 4

;Проверка соединения + Отрисовка чекбоксов
For $i = 1 To $aCheckbox[0]
   GUISetState(@SW_HIDE)
_Ping_Number($sHost, $iTime, $iN)
if @error Then
			TrayTip ( "Проверка на наличие соединения с интернет", "Соединение с интернет не обнаружено, завершаю работу.", 3 , 1)
		 MsgBox(16+262144, 'Error', "Соединение с интернет отсутствует!")
	Else
		 TrayTip ( "Этап инициализации.", "Соединение с интернет обнаружено." & @LF & "Продолжаю работу.", 3 , 1)
EndIf
_WinAPI_IsNetworkAlive()
if @error Then
			TrayTip ( "Проверка на наличие соединения с интернет", "Соединение с интернет не обнаружено, завершаю работу.", 3 , 1)
		 MsgBox(16+262144, 'Error', "Соединение с интернет отсутствует!")
	Else
		 TrayTip ( "Этап инициализации.", "Соединение с интернет обнаружено." & @LF & "Продолжаю работу.", 3 , 1)
	EndIf
   $aCheckbox[$i] = GUICtrlCreateCheckbox($aCheckbox[$i], 8, 40 + ($i - 1) * 20)
Next

;Функция Пинга GOOGLE.RU
Func _Ping_Number($sHostName, $iTimeOut = 8000, $iNumber = 4)
    Local $iPing
    For $i = 1 To $iNumber
        $iPing = Ping($sHostName, $iTimeOut)
        If Not @error Then ExitLoop
    Next
    If @error Then
        Return SetError(@error)
    Else
        Return SetError(0, $iPing, 1)
    EndIf
EndFunc

То работает не как надо.
Подскажите как правильно?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
if _WinAPI_IsNetworkAlive() = @error Then

и
Код:
_WinAPI_IsNetworkAlive()
if @error Then

Разные вещи между прочим...

Success: The type of network connection ($NETWORK_ALIVE_*) if a local system is connected to a network.
0 - Is no connection.

Failure: 0 and sets the @error flag to non-zero.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Привел к такому виду:
Код:
;Проверка соединения + Отрисовка чекбоксов
For $i = 1 To $aCheckbox[0]
   GUISetState(@SW_HIDE)
   $aCheckbox[$i] = GUICtrlCreateCheckbox($aCheckbox[$i], 8, 40 + ($i - 1) * 20)
Next
if _Ping_Number($sHost, $iTime, $iN) And _WinAPI_IsNetworkAlive() = @error Then
	TrayTip ( "Проверка на наличие соединения с интернет", "Соединение с интернет не обнаружено, завершаю работу.", 3 , 1)
	MsgBox(16+262144, 'Error', "Соединение с интернет отсутствует!")
Else
	TrayTip ( "Этап инициализации.", "Соединение с интернет обнаружено." & @LF & "Продолжаю работу.", 3 , 1)
	Sleep(3000)
EndIf

Работает.
 
Верх