Что нового

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

BOOKER

Новичок
Сообщения
33
Репутация
0
ОЧень хочу научиться Autoit но незнаю с какой стороны подойти, наверное вас уже достали подобными темами но всё же. Допустим я хочу сделать такую штуку которая раз в определённое время будет будет проверять моё соеденение с интернетом а если оно отсутствует то подключать его. Я не прошу чтобы мне всё расписывали я прошу чтобы подтолкнули в нужном направлении. И сказали с чего будет начать правильнее. Ну там я не знаю сначала сделай GUI потом то то и т.д
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
да и вообще, помоему это больше подходит для общения.
пусть автор отпишется, не против ли он такого перемещения. тем более что-то подобное уже есть
http://autoit-script.ru/index.php?topic=541
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Если надо то перемещайте)
Нет то что по ссылке не совсем то.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER
я так понимаю ты ari100krat на конфе. тебе дано отличное подспорье для начала работы. а именно
1. определить адрес своего шлюза (ipconfig)
2. пропинговать его через ping запущенный через Run с перехватом стандартного потока и анализа ответа на предмет наличия/отсутствия реакции шлюза на пинг (Run с особым упором на флаги $STDIN_CHILD и $STDOUT_CHILD)
3. запуск системной утили rasphone с необходимыми ключами для подключения в случае его отсутствия.

ладно, пусть будет тут. только тему переименую ;)
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Kaster сказал(а):
запуск системной утили rasphone с необходимыми ключами для подключения в случае его отсутствия.

Вот кстати на счёт rasphone я тоже сначала думал про такой вариант запуска а потом мне в джабере к сожалению не помню кто но подсказал что можно через командную строку запустить командой rasdial имя впн логин пароль. Как лучше или удобнее будет?

И ещё кстати. Через ipconfig у моего VPN соеденения постоянно меняется шлюз ибо IP не статичный. Или я что то не так делаю или такой вариант отпадает?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER
попробуй вот еще что - сравни что показывает ipconfig с активным vpn и с выключенным. может имеет смысл обойтись одним ipconfig.
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Вот с активным
42067c58351b.jpg


Вот с неактивным
a196b77c22be.jpg
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
OffTopic:
говорят rasdial круче ;)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
Ну вот и ответ - при отключенном соединении, в ipconfig его попросту нет.
То есть делай ipconfig и анализируй ответ. Если там нет строк с названием твоего vpn - значит его надо включить, делаешь rasdial
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Kaster сказал(а):
Ну вот и ответ - при отключенном соединении, в ipconfig его попросту нет.
То есть делай ipconfig и анализируй ответ. Если там нет строк с названием твоего vpn - значит его надо включить, делаешь rasdial
На данный момент мне почти всё стяло ясно пасиб.Щас попробую и будут еще вопросы учител! Пасибо :smile:

Во вопрос созрел) Я сделал это так
Код:
Run ("cmd.exe")
WinWaitActive ("C:\WINDOWS\system32\cmd.exe")
Send ("ipconfig{Enter}")

Как в самом банальном примере. Как это можно сделать проще?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER [?]
Как это можно сделать проще?
Код:
$pid = Run("ipconfig", "", @SW_HIDE, 0x2)
$line = ""
While 1
    $line &= StdoutRead($pid)
    If @error Then ExitLoop
Wend

MsgBox(0, "STDOUT read:", $line)
 
Автор
B

BOOKER

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER [?]
А можно ещё слегана подразжевать что за что отвечает?
берешь ключевое слово и смотришь в справке. так проще для тебя, не для меня, ты же понимаешь ;)
PS - ключевое слово, как правило, не серое (это строковое выражение) и не зеленое (это комментарий), не бордовое (это название переменных).
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
На самом деле я так и делаю. Потом из справки тащу в переводчик)) Сейчас у мя вопрос возник по поводу $pid и $line потому что в справке я их не могу найти(
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER
это название переменных. все переменные в AutoIt имеют ведущий знак доллара. в их определении определенная доля произвола. но есть общие рекомендации, по поводу того, как надо обзывать свои переменные, чтобы они были понятные другим.
 
Автор
B

BOOKER

Новичок
Сообщения
33
Репутация
0
Код:
$pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
$line = ""
While 1
    $line &= StdoutRead($pid)
    If @error Then ExitLoop
Wend

MsgBox(0, "STDOUT read:", $line)


Код:
$pid  = Run("ipconfig", "", @SW_HIDE, 0x2)
$pid - это переменная. После знака "=" определяется её значение.Тоесть при дальнейшем её упоминании в скрипте она будет выполнять "("ipconfig", "", @SW_HIDE, 0x2)".
@SW_HIDE - в справке написано что скрывает окно.Тоесть не покажет те данные что раздобыло пр выполнении "ipconfig"
0x2- я так понял что это опция настройки для @SW_HIDE

Код:
$line = ""
почему пусто не понимаю, мб что бы пр дальнейшем упомнинании можно было вставлять что угодно как бы сохранять в неё чтонибудь.

Код:
While 1
я так понял что это подразедл что ли, для зацикливания каких либо действий, их я так понял много может быть(я хз. вроде понимаю зачем незнаю как обьяснить)

Код:
$line &= StdoutRead($pid)
зачем "&" я не углядел негде.StdoutRead($pid) - это я понял будет выхватывать инфу которую раздобудет $pid и записывать в $line.

Код:
If @error Then ExitLoop
если происходит какая то ошибка то он не выполняет всё что написано внутри While 1. Что считать ошибкой наверное можно задать.

Код:
Wend
Wend - закрывает While 1

Код:
MsgBox(0, "STDOUT read:", $line)
ну и вывод всех собранных данных в $line в
окошко.
 

SyDr

Сидра
Сообщения
651
Репутация
158
BOOKER [?]
$pid - это переменная. После знака "=" определяется её значение.Тоесть при дальнейшем её упоминании в скрипте она будет выполнять "("ipconfig", "", @SW_HIDE, 0x2)"[email protected]_HIDE - в справке написано что скрывает окно.Тоесть не покажет те данные что раздобыло пр выполнении "ipconfig"0x2- я так понял что это опция настройки для @SW_HIDE
Знак =. Вычисляется значение справа и присваивается тому, что стоит слева
0x2 - параметр функции Run. См. её описание

почему пусто не понимаю, мб что бы пр дальнейшем упомнинании можно было вставлять что угодно как бы сохранять в неё чтонибудь.
Перед использованием переменные необходимо объявлять.
Для этого можно использовать ключевые слова Dim / Global / Local, а можно объявить переменную, просто что-то ей присвоив.
Здесь данной переменной присваивается пустая строка.

Цикл служит для многократного повторения каких-то действий. В качестве условия выполнения стоит 1, что означает, что цикл будет выполняться бесконечно.

зачем "&" я не углядел негде.
$line &= 'data' эквивалентно $line = $line & 'data'
& - символ объединения строк


если происходит какая то ошибка то он не выполняет всё что написано внутри While 1. Что считать ошибкой наверное можно задать.
@error служит для отображения успешной (или не очень) работы функции
Для данной функции значение @error равно не нулю после того, как будет достигнут EOF (end of file, конец файла) или произойдёт какая-то другая ошибка.
ExitLoop в данном случае позволяет выйти из этого бесконечного цикла.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
625
BOOKER [?]
$pid - это переменная. После знака "=" определяется её значение.Тоесть при дальнейшем её упоминании в скрипте она будет выполнять "("ipconfig", "", @SW_HIDE, 0x2)".
нет. Run выполнится единожды и вернет значение. Каждая функция возвращает свое значение, или не возвращает его вовсе. Нужно смотреть в справке про каждую функцию. Run к примеру запускает указанный процесс и возвращает его внутренний системный идентификатор. Это ссылка на этот процесс. И каждый раз при упоминании названия переменной $pid вместо него будет подставляться каждый раз ссылка на этот процесс.
0x2- я так понял что это опция настройки для @SW_HIDE
Нет. Это означает, что нужно перехватить стандартный поток вывода (это окно консоли где выполняется результат работы ipconfig).
почему пусто не понимаю
Потому что в дальнейшем, в скрипте (а именно в цикле) производится операция
Код:
$line &= StdoutRead($pid)

которая эквивалента
SyDr [?]
$line &= 'data' эквивалентно $line = $line & 'data'
И если расшифровать, то при первом вхождении в цикл переменной $line присвоится старое значение $line и еще то, что покажет StdOutRead($pid) (то есть то, что вывелось в окно консоли). Если до начала цикла не объявить эту самую переменную, то в цикле произойдет сбой, т.к. у этой переменной нет старого значения. А равно она пустой строке, потому что мы не хотим видеть в ней ничего кроме выполнения ipconfig. И так до тех пор, пока ipconfig не выведет все нужные строки. Как только выводимые строки кончатся, @error, который является макро-величиной хранящий в себе результат завершения или ошибки вышестоящей операции примет значение 1, и цикл завершится, т.к. увидит команду ExitLoop (выход из цикла).
После этого вывод полученного сообщения которая полностью хранится теперь в переменной $line на экран через
Код:
MsgBox(0, "STDOUT read:", $line)

Примерно так
 
Верх