давным давно у меня был сотовый модем и ночной безлимит... )))
Модем был билайновский, до сих пор у меня лежит, ZTE MF626, и управлялся он левой программой 3G Modem Manager
Код:
#include <GUIConstants.au3> ; На случай трансляции ; 1 - время да, 2 - инет да, 3 - контроль да, 4 - первый да ;$str1110 = "Время OK, инет OK, рулим шеф!" ;$str1010 = "Время OK, инет NO, втыкаем!" ;$str0110 = "Время NO, инет OK, рубим нах!" ;$str0010 = "Время NO, инет NO, курим!" ;$str0101 = "Время NO, инет OK, преднастрой!" ;$str0001 = "Время NO, инет NO, преднастрой!" ;$str1100 = "Время OK, инет OK, нет контроля!" ;$str1000 = "Время OK, инет NO, нет контроля!" ;$str0100 = "Время NO, инет OK, нет контроля!" ;$str0000 = "Время NO, инет NO, нет контроля!" ;$Control1 = "Включить контроль" ;$Control0 = "Выключить контроль" $str1110 = "День, сеть, работаем насяльник!" $str1010 = "День, дом, премся на поле!" $str0110 = "Ночь, сеть, в барак!" $str0010 = "Ночь, дом, спим!" $str0101 = "Ночь, сеть, настройки..." $str0001 = "Ночь, дом, настройки..." $str1100 = "День, сеть, что прикажете?" $str1000 = "День, дом, что прикажете?" $str0100 = "Ночь, сеть, что прикажете?" $str0000 = "Ночь, дом, что прикажете?" $Control1 = "Работать негра!" $Control0 = "Вольно салага!" $Over = 0 $Over1 = 0 $First = 1 $State = 0 $x = 0 $file = "timer_for_HC.log" $last = 0 Opt("GUIOnEventMode", 1) ; Change to OnEvent mode $mainwindow = GUICreate("[Погоняло]+", 400, 200) GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") GUICtrlCreateLabel("Таймер инета, для HC", 10, 2) ; Небольшое описалово в вверху справа ;GUICtrlCreateGroup ( "Рекомендую ознакомиться (для версии без HC)", 130, 2, 265, 72) ;GUICtrlCreateLabel("Работает с подключ-м по умолчанию. В парамет-", 135, 20) ;GUICtrlCreateLabel("рах подключ-я IE должно стоять всегда исполь-", 135, 35) ;GUICtrlCreateLabel("зовать принятое по умолчанию подключение", 135, 50) GUICtrlCreateGroup ( "Рекомендую ознакомиться (для версии с HC)", 130, 2, 265, 72) GUICtrlCreateLabel("Работает с программой Handy Cache. В НС на", 135, 20) GUICtrlCreateLabel("закладке дозвон сделана опция дозвон/отклю-", 135, 35) GUICtrlCreateLabel("чение по клавише Ctrl+Shift+F12, для управления", 135, 50) ; Группа таймеров - сами часы, начало, конец GUICtrlCreateGroup ( "Таймер", 5, 15, 120, 150) $HH = GUICtrlCreateEdit ( "00", 10, 40, 110, 30, $ES_READONLY+$ES_CENTER) GUICtrlSetFont (-1,16, 600) GUICtrlCreateLabel("Подключить в Ч:М", 10, 75) $HH1 = GUICtrlCreateInput ( "00", 10, 90, 53, 25, $ES_CENTER+$ES_NUMBER) GUICtrlSetFont (-1,12, 600) GUICtrlCreateUpdown ($HH1) $MM1 = GUICtrlCreateInput ( "00", 67, 90, 53, 25, $ES_CENTER+$ES_NUMBER) GUICtrlSetFont (-1,12, 600) GUICtrlCreateUpdown ($MM1) ; программа, запускаемая после подключения к интернету GUICtrlCreateLabel("- и запустить прогу", 130, 75) $Prog = GUICtrlCreateEdit ( "Запуск программы после", 130, 97, 240, 20, $WS_HSCROLL) $ProgButton = GUICtrlCreateButton ( "...", 375, 97, 20, 20) GUICtrlCreateLabel("Отключить в Ч:М", 10, 120) $HH2 = GUICtrlCreateInput ( "00", 10, 135, 53, 25, $ES_CENTER+$ES_NUMBER) GUICtrlSetFont (-1,12, 600) GUICtrlCreateUpdown ($HH2) $MM2 = GUICtrlCreateInput ( "00", 67, 135, 53, 25, $ES_CENTER+$ES_NUMBER) GUICtrlSetFont (-1,12, 600) GUICtrlCreateUpdown ($MM2) ; программа принудительно закрываемая после отключения интернета $Shut = GUICtrlCreateCheckbox ("- и закрыть процесс, выключить комп", 130, 120, 235, 20) $Prog2 = GUICtrlCreateEdit ( "Запуск программы после", 130, 142, 240, 20, $WS_HSCROLL) $ProgButton2 = GUICtrlCreateButton ( "...", 375, 142, 20, 20) ; галочка если нужно комп выключать ; небольшой сигнализатор, сообщающий должен быть инет или нет $Inet = GUICtrlCreateLabel ( "Инициализация.........................................................", 10, 175) GUICtrlSetFont (-1,12, 400) $OnButton = GUICtrlCreateButton ( $Control1, 275, 170, 120, 25) GUICtrlSetOnEvent($OnButton, "OnButton") GUICtrlSetOnEvent($ProgButton, "ProgButton") GUICtrlSetOnEvent($ProgButton2, "ProgButton2") GUICtrlSetData ( $HH1, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "HH1", "")) GUICtrlSetData ( $HH2, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "HH2", "")) GUICtrlSetData ( $MM1, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "MM1", "")) GUICtrlSetData ( $MM2, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "MM2", "")) GUICtrlSetData ( $Prog, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "Prog", "")) GUICtrlSetData ( $Prog2, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "Prog2", "")) GUICtrlSetState ( $Shut, IniRead ( @ScriptDir & "\Autoit.ini", "Timers", "Shut", "")) GUISwitch($mainwindow) GUISetState(@SW_SHOW) While 1 CheckData ($HH1, 00, 23) CheckData ($MM1, 00, 59) CheckData ($HH2, 00, 23) CheckData ($MM2, 00, 59) ; это для движения часиков Sleep(1000) ; Idle around GUICtrlSetData ( $HH, @HOUR & ":" & @MIN & ":" & @SEC) if ProcessExists("HandyCache.exe") > 0 then if TimeOn() = 0 and $First = 1 then if _GetNetworkConnect() = True then InfoDataSet ($str0101) if _GetNetworkConnect() = False then InfoDataSet ($str0001) Else ; в случае если время включиться и еще не время выключиться, ; датчик сигнализует чтобы инет был, проверяет его наличие и ; при необходимости стартует его и запускает программу Select Case TimeOn() = 1 and GUICtrlRead ($OnButton) = $Control0 if _GetNetworkConnect() = True then InfoDataSet ($str1110) if _GetNetworkConnect() = False then InfoDataSet ($str1010) if _GetNetworkConnect() = False and $State <> 1 then _InetConnect(1) MonoRun(GUICtrlRead ($Prog)) $First = 0 ; если же время вышло, то закрывается принудительно инет, ; так же закрывается прога, ждется 10 сек и комп выключается Case TimeOn() = 0 and $First = 0 and GUICtrlRead ($OnButton) = $Control0 if _GetNetworkConnect() = True then InfoDataSet ($str0110) if _GetNetworkConnect() = False then InfoDataSet ($str0010) if _GetNetworkConnect() = True and $State <> 2 then _InetConnect(0) if GUICtrlRead ($Shut) = $GUI_CHECKED then MonoClose(GUICtrlRead ($Prog2)) Sleep(5000) ; Idle around Shutdown (9) CLOSEClicked() EndIf Case TimeOn() = 1 and GUICtrlRead ($OnButton) = $Control1 if _GetNetworkConnect() = True then InfoDataSet ($str1100) if _GetNetworkConnect() = False then InfoDataSet ($str1000) Case TimeOn() = 0 and $First = 0 and GUICtrlRead ($OnButton) = $Control1 if _GetNetworkConnect() = True then InfoDataSet ($str0100) if _GetNetworkConnect() = False then InfoDataSet ($str0000) EndSelect endif Else GUICtrlSetData ( $Inet, "Хендика нет!") endif WEnd Func TimeOn() ; проверка - если время начала позже времени конца, значит это ; время вчерашнего дня, и инет в промежуток между вчера и ; сегодня будет работать (проблема перехода через 0) if GUICtrlRead ($HH1) * 60 + GUICtrlRead ($MM1) >= GUICtrlRead ($HH2) * 60 + GUICtrlRead ($MM2) then Select Case @HOUR * 60 + @MIN <= GUICtrlRead ($HH1) * 60 + GUICtrlRead ($MM1) and @HOUR * 60 + @MIN >= GUICtrlRead ($HH2) * 60 + GUICtrlRead ($MM2) return 0 Case @HOUR * 60 + @MIN >= GUICtrlRead ($HH1) * 60 + GUICtrlRead ($MM1) or @HOUR * 60 + @MIN < GUICtrlRead ($HH2) * 60 + GUICtrlRead ($MM2) return 1 EndSelect else if @HOUR * 60 + @MIN >= GUICtrlRead ($HH1) * 60 + GUICtrlRead ($MM1) and @HOUR * 60 + @MIN < GUICtrlRead ($HH2) * 60 + GUICtrlRead ($MM2) then return 1 else return 0 endif endif EndFunc ;Func _GetNetworkConnect() ; Local $aRet, $iResult ; $aRet = DllCall("sensapi.dll", "int", "IsNetworkAlive", "int*", 0) ; If BitAND($aRet[1], 0x2) Then Return True ; If BitAND($aRet[0], 0x2) Then Return True ; Return False ;EndFunc Func _GetNetworkConnect() $InetStruct = DllStructCreate("int") $aRet = DllCall("wininet.dll", "int", "InternetGetConnectedState", "ptr", DllStructGetPtr($InetStruct), "int", 0) $val = DllStructGetData($InetStruct, 1) if $val = 81 Then Return True Return False EndFunc Func OnButton() Select Case GUICtrlRead ($OnButton) = $Control1 GUICtrlSetData ( $OnButton, $Control0) Case GUICtrlRead ($OnButton) = $Control0 GUICtrlSetData ( $OnButton, $Control1) EndSelect EndFunc Func ProgButton() $var = FileOpenDialog ( "Указать путь к программе", "", "Исполняемый файл (*.exe)", 1) if StringLen ($var) > 0 then GUICtrlSetData ( $Prog, $var) EndFunc Func ProgButton2() $var = FileOpenDialog ( "Указать путь к программе", "", "Исполняемый файл (*.exe)", 1) $var2 = StringLen ($var) if StringLen ($var) > 0 then GUICtrlSetData ( $Prog2, StringRight( $Var, $var2 - StringInStr( $var, "\", 0, -1 ))) EndFunc Func _InetConnect($x) Select Case $x = 1 Send ("^+{F12}") $State = 1 Case $x = 0 Send ("^+{F12}") $State = 2 EndSelect EndFunc Func MonoRun($x) $var2 = StringLen ($x) if StringLen ($x) > 0 then $x = StringRight( GUICtrlRead ($Prog), $var2 - StringInStr( GUICtrlRead ($Prog), "\", 0, -1 ) ) if ProcessExists($x) = 0 then ShellExecute('"' & GUICtrlRead ($Prog) & '"', "", "") endif EndFunc Func MonoClose($x) if ProcessExists($x) then ProcessClose(ProcessExists($x)) EndFunc Func CLOSEClicked() IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "HH1", GUICtrlRead ($HH1) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "HH2", GUICtrlRead ($HH2) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "MM1", GUICtrlRead ($MM1) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "MM2", GUICtrlRead ($MM2) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "Prog", GUICtrlRead ($Prog) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "Prog2", GUICtrlRead ($Prog2) ) IniWrite ( @ScriptDir & "\Autoit.ini", "Timers", "Shut", GUICtrlRead ($Shut) ) Exit EndFunc Func InfoDataSet($x) WinSetTitle ( WinGetTitle( "[Погоняло]", "Таймер инета, для HC" ), "Таймер инета, для HC", "[Погоняло] - " & $x ) GUICtrlSetData ( $Inet, $x) if $last <> $x then FileWrite($file, "[" & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & "] " & $x & @CRLF) $last = $x EndFunc Func CheckData ($x, $y, $z) if GUICtrlRead ($x) > $z then GUICtrlSetData ($x, $y) if GUICtrlRead ($x) < $y then GUICtrlSetData ($x, $z) EndFunc