Что нового

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

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(([email protected]*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
Репутация
622
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(([email protected]*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*[email protected])+80)*1000)
	Else ;если время меньше 80
		Sleep(([email protected]*[email protected])*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(([email protected]*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*[email protected])+80)*1000)
	Else ;если время меньше 80
		Sleep(([email protected]*[email protected])*1000) ; усыпляем скрипт до времени начала нужного диапазона
	EndIf ;  и выходим из If
Wend ; в 1.10 в субботу отключаемся
Shutdown(1)  ;выключение компьютера
Полностью проверить его работоспособность пока не было времени. А вот запускать его в дело нужно уже скоро... Поэтому очень надеюсь на посказки профессионалов. Что может пойти не так? Что может не запуститься? При прогонке ошибок не выдало, но они же и при этом всегда возможны...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
кстати, чем не устраивает использование 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 этот "частями" вырисовывается, попробуй систему перегрузи, у меня все аналогичные действия прокатывают на "ура".
Пробовал. Все тоже самое(
 
Верх