давным давно у меня был сотовый модем и ночной безлимит... )))
Модем был билайновский, до сих пор у меня лежит, 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