Что нового

[Автоматизация] Автоматизация интернет-соединений

ViktorF

Новичок
Сообщения
30
Репутация
0
Здравствуйте!
Я новичок в вопросах AutoIt, но очень хотел бы научиться эффективно уметь применять его.
На данный момент возникла такая задача:
Мне нужно написать программу, которая в нужное время будет разрывать один тип соединения и запускать другой (соединение должно быть круглосуточно). Плюс в некоторые дни программа должна отключать в определенное время соединение и компьютер.
С AutoIt я знаком второй день и пока успел сделать только это:

Local $Dialer, $ON

If (@HOUR=1 AND @MIN>=20) OR (@HOUR>1 AND @HOUR<7 ) OR (@HOUR=7 AND @MIN<=40) Then

$Dialer=Run ("C:\Program Files\SP Dialer 1.40\SP Dialer.exe")
WinWaitActive ("SP Dialer")
Send ("life")
ControlClick ( "SP Dialer", " ", "Звонить")
$ON=("Active")
Else

$Dialer=Run ("C:\Program Files\SP Dialer 1.40\SP Dialer.exe")
WinWaitActive ("SP Dialer")
Send ("Высокоскоростное подключение")
ControlClick ( "SP Dialer", " ", "Звонить")
$ON=("Active")
EndIf

SP Dialer - это программа автодозвона на моем компьютере (хотя это наверное и так все поняли :smile: )

Вот вопросы, которые есть на данный момент:

-если в самом начале кода задать какое-то значение переменным - оно будет постоянно изменяться на заданное после при очередном проходе проверки кода (и делается ли вообще этот очередной проход, если в конце нет явного указания на завершение работы кода)?

Например, если задать $ON=0 (в начале) - после прохождения всего кода он начинает проверку условия заново? Если да, то полученное в процессе исполнения кода значение Active потеряется?

-как можно установить проверку того, осуществилось в итоге соединение или нет? (например, нет связи. Код, вроде, выполнен, а соединение не осуществилось)

-SP Dialer "прячется" после соединения в трей. Как его потом оттуда "доставать"?

-ну и, конечно же, буду благодарен за критику и посказки для улучшения того маленького кусочка, который уже есть)

Зарание очень благодарен за советы и наставления))
 

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
а использование звонилки критично? можно просто дозвоница и разорвать соединение
Код:
; дозвонились
$CONNECTNAME="Имя вашего соединения"
ShellExecute(@SystemDir&"\RASdial.EXE",""&$CONNECTNAME)
Sleep(3000)
; разорвали соединение
ShellExecute(@SystemDir&"\RASPHONE.EXE"," -H "&$CONNECTNAME)
Sleep(2000) 
Exit
и не надо не кого из трея доставать. а про проверку наличия соединения может вам поможет эта тема http://autoit-script.ru/index.php?topic=3296.msg23721#msg23721
по первому вопросу не понял самого вопроса :wacko:
 

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Попутный вопрос иногда бывает такая ситуация когда соединение по какойто причине крыво отрубилось, чаще всего это происходит когда скажим делаешь logof, но бывает и при других обстоятельствах, пинга нет в активных соединениях не видно, и конект не проходит выскакивает окно свойства модема, как можно в такой ситуации отрубить соединение???
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
qsort сказал(а):
Код:
While 1   ; программа у нас будет работать вечно
...
    If    ; после запуска программы, решаем какое соединение выбрать
        ... ; выбираем первое соединение и подключаемся 
		While 1
			Sleep() ; болтаемся здесь, пока позволяет время
      Wend 
		... ; действия, заканчивающие первое соединение (убиваем все подряд и т.д.)
    Else
        ... ; иначе запускаем другое соединение и все то же самое.
    EndIf 
...
Wend

Я так понимаю, теперь появляется неоходимость рассчитать величину параметра Sleep. Как это грамотно сделать?
 

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
qsort
Что же это у вас там за соединения-то, такие хитрые, что не отрубаются?
да обычный Dial-Up через 3G интегрированный модем 1м\бит скорость )) происходит это при
Код:
Shutdown ( 4 )
Sleep 10сек хватает после дисконекта до logof. понятно что не хватает времени для нормального разъединения. просто интересно что в таком случае зависает и как это можно устранить если вдруг не хватило времени и такое произошло.
 

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Я таких "обычных" Dial-Up'ов не знаю;) Для меня Dial-Up - это нечто связанное с компортом
да обычный такой модем на СОМ3 висит пихаеш в нет бук SIM карточку и пользуешся инетом везде где только сможешь себе представить) как обычно спасибо за свеженькую идейку а то я уже хотел городить огород с диспечером устройств завтра попробую отпишусь, а то уже глаза слипаются.
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
Здравствуйте все!)

Вот, наконец, удалось выкроить время и написать скрипт для автоматизации интернет-соеднинеий.
Вот что у меня получилось:
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         VoktorF

 Script Function:
	Автоматизация переключений интернет-соединений

#ce ----------------------------------------------------------------------------

While @WDAY<6 OR (@WDAY=6 AND @HOUR*60 + 10 <=70); проверка дня недели и времени
    If (@HOUR*60 + 20 >= 80) AND (@HOUR*60+40 <= 460) ; определяем время работы Life
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");если время работыть Life, отключим ADSL
		WinWaitActive ("Состояние Подключение по локальной сети 2")
		ControlClick ( "Состояние Подключение по локальной сети 2", "&Отключить", 1025)
		
		WinSetState("SP Dialer", "", @SW_RESTORE );вызовем и запустим Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Звонить", 1152)
		Sleep((460-@HOUR*60 - @MIN)*1000 +1000) ; усыпляем скрипт на время, оставшееся до окончания работы Life + 1 сек.
		WinSetState("SP Dialer", "", @SW_RESTORE ); отключам Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Разорвать", 1152)
		ControlClick ( "SP Dialer", "Скрыть", 1222)
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");включаем обратно ADSL
	EndIf ; иначе не производим никаких действий, т.к. все необходимое уже запущено Автозапуском при включении компьютера
Wend
Sleep(300000) ; 5 минутное ожидание действий пользователя 
Shutdown(1)  ;выключение компьютера

Жду полезной критики и советов для улучшений)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ViktorF
ну, самое главное - это то, что для ControlClick'ов не нужно активное окно. и даже видимое.
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
Kaster сказал(а):
ViktorF
ну, самое главное - это то, что для ControlClick'ов не нужно активное окно. и даже видимое.

Спасибо! Учту)

Не учел усыпление скрипта при времени для соединения ADSL.
Вот немного исправленный код:
Код:
While @WDAY<6 OR (@WDAY=6 AND @HOUR*60 + 10 <=70); проверка дня недели и времени
    If (@HOUR*60 + 20 >= 80) AND (@HOUR*60+40 <= 460) Then; определяем время работы Life
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");если время работыть Life, отключим ADSL
		WinWaitActive ("Состояние Подключение по локальной сети 2")
		ControlClick ( "Состояние Подключение по локальной сети 2", "&Отключить", 1025)
		
		WinSetState("SP Dialer", "", @SW_RESTORE );вызовем и запустим Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Звонить", 1152)
		Sleep((460-@HOUR*60 - @MIN)*1000) ; усыпляем скрипт на время, оставшееся до окончания работы Life
		WinSetState("SP Dialer", "", @SW_RESTORE ); отключам Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Разорвать", 1152)
		ControlClick ( "SP Dialer", "Скрыть", 1222)
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");включаем обратно ADSL
	ElseIf @HOUR*60+40 > 460; иначе усыпляем скрипт на время, оставшееся до начала нужного диапазона
		Sleep((24*60-(@HOUR*60+@MIN)+80)*1000)
	Else ;если время меньше 80
		Sleep((80-@HOUR*60-@MIN)*1000) ; усыпляем скрипт до времени начала нужного диапазона
	EndIf ;  и выходим из If
Wend
Sleep(300000) ; 5 минутное ожидание действий пользователя 
Shutdown(1)  ;выключение компьютера


Добавлено:
Сообщение автоматически объединено:

Немного поразмыслив о времени работы скрипта я пришел к выводу, что в выходные он тоже должен использоваться. А выход должен осуществляться только в один определенный момент времени. В итоге код был еще немного изменен:

Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         VoktorF

 Script Function:
	Автоматизация переключений интернет-соединений

#ce ----------------------------------------------------------------------------

While (@WDAY=6 AND @HOUR*60 + 10 =70)=False; проверка дня недели и времени
    If (@HOUR*60 + 20 >= 80) AND (@HOUR*60+40 <= 460) Then; определяем время работы Life
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");если время работать Life, отключим ADSL
		WinWaitActive ("Состояние Подключение по локальной сети 2")
		ControlClick ( "Состояние Подключение по локальной сети 2", "&Отключить", 1025)
		
		WinSetState("SP Dialer", "", @SW_RESTORE );вызовем и запустим Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Звонить", 1152)
		Sleep((460-@HOUR*60 - @MIN)*1000) ; усыпляем скрипт на время, оставшееся до окончания работы Life
		WinSetState("SP Dialer", "", @SW_RESTORE ); отключам Life
		WinWaitActive ("SP Dialer")
		ControlClick ( "SP Dialer", "Разорвать", 1152)
		ControlClick ( "SP Dialer", "Скрыть", 1222)
		Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");включаем обратно ADSL
	ElseIf @HOUR*60+40 > 460 Then; иначе усыпляем скрипт на время, оставшееся до начала нужного диапазона
		Sleep((24*60-(@HOUR*60+@MIN)+80)*1000)
	Else ;если время меньше 80
		Sleep((80-@HOUR*60-@MIN)*1000) ; усыпляем скрипт до времени начала нужного диапазона
	EndIf ;  и выходим из If
Wend ; в 1.10 в субботу отключаемся
Shutdown(1)  ;выключение компьютера

Полностью проверить его работоспособность пока не было времени. А вот запускать его в дело нужно уже скоро... Поэтому очень надеюсь на посказки профессионалов. Что может пойти не так? Что может не запуститься? При прогонке ошибок не выдало, но они же и при этом всегда возможны...
 

kaster

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

ViktorF

Новичок
Сообщения
30
Репутация
0
Попробовал прогнать код под текущее время - не происходит открытия окна по
Код:
Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk")

Что не так? почему окно не открывается?
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
Kaster сказал(а):
кстати, чем не устраивает использование rasdial из командной строки?

Оно ни не устраивает. Для меня это просто пока еще все темный лес. Если есть какая-нибудь литература или еще что о том, что это такое и как этим пользоваться, скиньте ссылочку буду очень благодарен)


Добавлено:
Сообщение автоматически объединено:

qsort сказал(а):
Сегодня суббота, может поэтому? :smile:

Да нет. Пробовал даже просто взять отдельно троки запуска окна:
Код:
Run("C:\Documents and Settings\ViktorF\Рабочий стол\Ярлык для Подключение по локальной сети 2.lnk");если время работать Life, отключим ADSL
		WinWaitActive ("Состояние Подключение по локальной сети 2")
		ControlClick ( "Состояние Подключение по локальной сети 2", "&Отключить", 1025)


Не отключает(
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
qsort сказал(а):
Кстати, о птицах, откуда взялось "&"? Не должно быть на кнопке-то...
Так мне эту кнопку AutoIt Window Info обозначил.

Такая проблема:
ярлыки для интернет-соединений почему-то даже из тотальника ничего не открывают... Видимо, и скрипт их по запустить не может. Почему это может быть?
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
...если при запущенном скрипте открыть это окно - все закрывается и отключается (как и должно быть). Ярлыки почему-то не срабатывают(


Добавлено:
Сообщение автоматически объединено:

qsort сказал(а):
Уж давненько такого не было, но:
rasdial "Имя соединения" /disconnect должно отработать.
Равно, как и rasdial "Имя соединения" должно начать дозвон.

Не получается. Что-то не так. Прошел по ссылкам выше, попробовал аналогично сделать с этим rasdial для своего соединения: Life запустил, а Подключение по локальной сети 2 не хочет.
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
А с разъединением вообще ничего не выходи( Опишите подробнее, если можно.


Добавлено:
Сообщение автоматически объединено:

qsort сказал(а):
Вот специально создал соединение, обозвал "Подключение по локальной сети 2" и преспокойно запустил. Может, ты его без кавычек пишешь?
Общее правило для командной строки: если аргумент с пробелами, он заключается в кавычки.
Подключаем:
Код:
rasdial "Подключение по локальной сети 2"
Отключаем:
Код:
rasdial "Подключение по локальной сети 2" /disconnect

Вот что выдало:
C:\Documents and Settings\ViktorF\??????? ????\????.au3 (1) : ==> Error parsing function call.:
rasdial "??????????? ?? ????????? ???? 2"
^ ERROR
>Exit code: 1 Time: 0.324


А пишу так же, как и Life запускал (просто изменил название соединения. Остальное так же и осталось)


Добавлено:
Сообщение автоматически объединено:

...и вот что выдает, когда пробую отключать Life:

C:\Documents and Settings\ViktorF\??????? ????\????.au3 (1) : ==> Missing separator character after keyword.:
rasdial "life" /disconnect
rasdial "life" /disconnect^ ERROR
>Exit code: 1 Time: 0.325
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
madmasles сказал(а):
ViktorF [?]
А с разъединением вообще ничего не выходи( Опишите подробнее, если можно.
*click*

пробовал изменить название Подключение по локальной сети 2 на adsl и ADSL - не запускается(

Может играет роль то, что life стоит в категории Удаленный доступ, а Подключение по локальной сети 2 - ЛВС и высокоскоростной интернте?
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
Еще одна проблема.
Строка
Код:
WinSetState("SP Dialer", "", @SW_RESTORE )

вызывает окно программы лишь бы как: видна только верхняя часть рамки с тремя кнопками(

Может, накосо что-то стало?
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
qsort сказал(а):
Попробовал погонять туда-сюда. Версия 1.4 от некого Панченко 2004 год.
Нормально "ресторируется"...

Не знаю почему, но у меня почему-то ничего толком не хочет работать((
 
Автор
V

ViktorF

Новичок
Сообщения
30
Репутация
0
qsort сказал(а):
Странно, вообще... Вроде, куда-то дозваниваешься...
А может у тебя адсл-модем? Тогда rasdial тебе его, конечно, не включит/не отключит...

А что включит и выключит?

qsort сказал(а):
Если еще и Dialer этот "частями" вырисовывается, попробуй систему перегрузи, у меня все аналогичные действия прокатывают на "ура".

Пробовал. Все тоже самое(
 
Верх