Что нового

[Сеть, интернет] Определить активность сетевого подключения и его запуск при отсутствии

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Код:
$hMain = GUICreate ("Internet Checker", 368, 203)
$hButton1 = GUICtrlCreateButton ("   &Запуск   ", 290, 20)
$hButton2 = GUICtrlCreateButton ("&Остановка", 290, 55)
$hButton3 = GUICtrlCreateButton ("    &Выход    ", 290, 90) 
$FarLine = "FarLine"
GUISetState ()

While 1
	$msg = GUIGetMsg ()
	If $msg = $hButton1 Then 
		MsgBox (0, "Run", "Скрипт запущен")
		$pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
		$line = ""
		While 1
   			$line &= StdoutRead($pid)
   			If @error Then ExitLoop
		Wend
		If Not StringInStr($line, $FarLine) Then
			RunWait("rasdial FarLine morgun 21532153")
		EndIf
 	EndIf
	If $msg = $hButton2 Then
		MsgBox (0, "Stop", "Скрипт остановлен")
	EndIf
	If $msg = $hButton3 Then
		$msgbox = MsgBox (1, "Exit", "Вы действительно хотите выйти?")
		If $msgbox=1 Then
			GUIDelete()
			Exit
		EndIf
	EndIf
WEnd

А то намудрил ты с синтаксисом...
Код:
RunWait
- думаю понятно, запускает и ждет закрытия. Это чтобы не делать Sleep как получится (10 секунд у тебя).
Код:
GUIDelete
- удаляет предыдущий созданный GUI. Удалять GUI перед выходом - просто хороший тон в AutoIt3
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Странно оно как то работает... Если включить прогу с запущеным инетом и потом его вырубить она не реагирует и не подрубает его. А нужно ещё раз нажимать запуск чтобы подрубил а нужно чтобы он в постоянке был
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Nik_rus [?]
Это чтобы не делать Sleep как получится (10 секунд у тебя).
Sleep там не для этого, а чтобы попусту не гонять утилиту. Какой смысл непрерывно проверять соединение? Я бы даже еще больше поставил. 1 мин или 5, к примеру.
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Опять вы меня запутывать взялись)
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Что не так:
Код:
$hMain = GUICreate ("Internet Checker", 368, 203)
$hButton1 = GUICtrlCreateButton ("   &Запуск   ", 290, 20)
$hButton2 = GUICtrlCreateButton ("&Остановка", 290, 55)
$hButton3 = GUICtrlCreateButton ("    &Выход    ", 290, 90) 

GUISetState ()

While 1
    $msg = GUIGetMsg ()
    If $msg = $hButton1 Then 
         MsgBox (0, "Run", "Скрипт запущен")
         While 1

$pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
$line = ""
$FarLine = "FarLine"
While 1
    $line &= StdoutRead($pid)
    If @error Then ExitLoop
Wend

If Not StringInStr($line, $FarLine) Then Run("rasdial FarLine morgun 21532153")
Sleep(10000)
WEnd
    EndIf
    If $msg = $hButton3 Then
        $msgbox = MsgBox (1, "Exit", "Вы действительно хотите выйти?")
        If $msgbox=1 Then
            GUIDelete()
            Exit
        EndIf
    EndIf
WEnd

Даже при нажатии на "Выход" стало выходить и норма работать.Теперь как это остановить Какая команда может помочь? И у мя ещё 3идеи по доработке этой конители)
З.Ы Да да я достовучий и неугомонный)
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
OffTopic:
BOOKER сказал(а):
Даже при нажатии на "Выход" стало выходить и норма работать.
Я удивился прочитав эту фразу

Дело в том, что у тебя есть Sleep() на 10 секунд, что стопорит твой GUI. Это раз.
И два: ты входишь в цикл внутри цикла проверки GUI. Поэтому он (GUI) у тебя не будет работать.
Вот так будет правильнее:
Код:
$hMain = GUICreate ("Internet Checker", 368, 203)
$hButton1 = GUICtrlCreateButton ("   &Запуск   ", 290, 20)
$hButton2 = GUICtrlCreateButton ("&Остановка", 290, 55)
$hButton3 = GUICtrlCreateButton ("    &Выход    ", 290, 90)
$FarLine = "FarLine"
GUISetState ()

While 1
    $msg = GUIGetMsg ()
    If $msg = $hButton1 Then $stop=False
	If $msg = $hButton2 Then $stop=True
    If $msg = $hButton3 Then
        $msgbox = MsgBox (1, "Exit", "Вы действительно хотите выйти?")
        If $msgbox=1 Then
            GUIDelete()
            Exit
        EndIf
    EndIf
	If $stop=False Then
		$pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
		$line = ""
		While 1
			$line &= StdoutRead($pid)
			If @error Then ExitLoop
		Wend
		If Not StringInStr($line, $FarLine) Then Run("rasdial FarLine morgun 21532153")
	EndIf
	Sleep(100)
WEnd

Однако, как верно заметил Kaster - скрипт будет жестко гонять цикл, а он и так с большим количеством кода.
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Возможные варианты? Ник, Сенсей? Можно что то придумать?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Есть такой вариант:
Код:
$hMain = GUICreate ("Internet Checker", 368, 203)
$hButton1 = GUICtrlCreateButton ("   &Запуск   ", 290, 20)
$hButton2 = GUICtrlCreateButton ("&Остановка", 290, 55)
$hButton3 = GUICtrlCreateButton ("    &Выход    ", 290, 90)
$FarLine = "FarLine"
$counter=0
GUISetState ()

While 1
    $msg = GUIGetMsg ()
    If $msg = $hButton1 Then $stop=False
    If $msg = $hButton2 Then $stop=True
    If $msg = $hButton3 Then
        $msgbox = MsgBox (1, "Exit", "Вы действительно хотите выйти?")
        If $msgbox=1 Then
            GUIDelete()
            Exit
        EndIf
    EndIf
    If ($stop=False) and ($counter=600) Then
        $pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
        $line = ""
        While 1
            $line &= StdoutRead($pid)
            If @error Then ExitLoop
        Wend
        If Not StringInStr($line, $FarLine) Then Run("rasdial FarLine morgun 21532153")
		$counter=0
    EndIf
    Sleep(100)
	$counter+=1
WEnd

Но он какой-то... не элегантный чтоли...
Сеть в том, что в каждом шаге цикла происходит Sleep() на 0.1 с, проверять мы будем каждую минуту, т.е. если в каждом шаге цикла прибавлять к счетчику единицу, то ровно через минуту (время исполнения функций в цикле не учитываем) счетчик достигнет значения 600 - в этот момент и сработает проверка на VPN.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
При каждом цикле, делайте TimerDiff. Если оно больше 1 мин, скажем, то ipconfig. После этого сброс TimerInit, и снова сверка TimerDiff. Сегодня уже нет сил расписывать это на практике.
BOOKER
Почитай справку на эти темы. Ну или на крайняк Nik_rus думаю поможет ;)
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Ну что? Ну что? Сенсей пока жи пример)
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Вариант с таймерами (ИМХО идеал :smile:):
Код:
$hMain = GUICreate ("Internet Checker", 368, 203)
$hButton1 = GUICtrlCreateButton ("   &Запуск   ", 290, 20)
$hButton2 = GUICtrlCreateButton ("&Остановка", 290, 55)
$hButton3 = GUICtrlCreateButton ("    &Выход    ", 290, 90)
$FarLine = "FarLine"
$counter=0
GUISetState ()
$timer = TimerInit()
While 1
    $msg = GUIGetMsg ()
    If $msg = $hButton1 Then $stop=False
    If $msg = $hButton2 Then $stop=True
    If $msg = $hButton3 Then
        $msgbox = MsgBox (1, "Exit", "Вы действительно хотите выйти?")
        If $msgbox=1 Then
            GUIDelete()
            Exit
        EndIf
    EndIf
    If ($stop=False) and (TimerDiff($timer)>1000*60*5) Then
        $pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
        $line = ""
        While 1
            $line &= StdoutRead($pid)
            If @error Then ExitLoop
        Wend
        If Not StringInStr($line, $FarLine) Then Run("rasdial FarLine morgun 21532153")
        $timer = TimerInit()
    EndIf
    Sleep(10)
WEnd
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
У меня ошибку выдаёт:
Код:
( ??? ?????? ?????\??????.au3 (20) : ==> Variable used without being declared.:
If ($stop=False) and (TimerDiff($timer)>1000*60*5) Then
If (^ ERROR
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Добавь
Код:
$stop = False

После
Код:
...
GUISetState ()
$timer = TimerInit()
...

Убери
Код:
Sleep(10)
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Шо то мне так не нравится... Надо сделать совсем всё проще и не парить себе моск
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Я уже постил самый что ни на есть простой GUI тут. Но тебе он как помнится не понравился (из религиозных соображений).
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Если бы я сразу принял твой GUI то не узнал бы ещё долго как мастерить другой))
 
Верх