Wielokrotnie zdarza mi się korzystać z internetu w pociągu przy użyciu zwykłego modemu 3g. Problem jest taki, że nie wszędzie mamy zasięg. Warto by było, aby aplikacje wymagające internetu nie żarły nam baterii kiedy my spokojnie czytamy to, co załadowała nam przeglądarka, lub odpalamy pdfa. Dzięki temu skryptowi w autoIT możemy zaoszczędzić kilka minut na baterii – które normalnie wyżarłyby nam aplikacje sieciowe próbujące się połączyć.
Cały kod został napisany w autoIT – jest to język używany przez programistów którzy piszą testy interfejsu graficznego, albo dzieciaków piszących boty do gier. Ogólnie można go użyć do wielu automatyzacji w samym Windowsie – lub chociażby jak ja – ubijania aplikacji po odpaleniu skryptu tylko w wypadku, kiedy lapek jest na baterii i jednocześnie nie ma internetu (w pozostałych sytuacjach nie robi nic poza sprawdzeniem stanu połączenia i baterii).
W skrypcie wykorzystano WMI, nazywanego przez niektórych wbudowanym backdoorem, gdyż na jego podstawie programista dowolnego języka (mamy dllkę w systemie) może odpytać system o cokolwiek zechce ( w następnym wpisie może pokażę jak wykorzystać WMI z poziomu c#). Sam kodzik wygląda następująco:
#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;MsgBox(0, "Jest net?", _IsInternetConnected()) Func _IsInternetConnected() Local $aReturn = DllCall('connect.dll', 'long', 'IsInternetConnected') If @error Then Return SetError(1, 0, False) EndIf Return $aReturn[0] = 0 EndFunc ;==>_IsInternetConnected Func _IsPowerOnline() Local $isok = false $objWMIService = ObjGet("winmgmts:\\" & "." & "\root\wmi") If @ERROR Then MsgBox(0,"","Error creating object") Exit EndIf $colItems = $objWMIService.ExecQuery("Select * From BatteryStatus", "WQL", 0x10 + 0x20) For $objItem in $colItems Return $objItem.PowerOnline Next EndFunc Func _runApps() If ProcessExists("kadu.exe") = 0 Then Run("C:\Program Files (x86)\Kadu\kadu.exe") EndIf If ProcessExists("Psi.exe") = 0 Then Run("C:\Program Files\Psi\Psi.exe") EndIf If ProcessExists("putty.exe") = 0 Then Run("C:\Users\piatkosia\Desktop\software\putty.exe") EndIf If ProcessExists("Skype.exe") = 0 Then Run("C:\Program Files (x86)\Skype\Phone\Skype.exe") EndIf EndFunc Func _skillujApki() MsgBox(0,"ups", "Padła sieć. Killuję apki") Sleep(5000) ProcessClose("kadu.exe") ProcessClose("Psi.exe") ProcessClose("putty.exe") ProcessClose("Skype.exe") EndFunc IF _IsPowerOnline() = False Then IF _IsInternetConnected() = False Then _skillujApki() Else _runApps() EndIf EndIf
Tak, nie jest to optymalnie napisane, powinnam zamiast rzędu ifów zrobić to jakoś ładniej, ale chcę, aby każdy mógł sobie pododawać analogiczne bloki lub pousuwać te już istniejące dostosowując skrypt do siebie. Jestem przykładem osoby, która tego używa. Odpalam jak widzę że net padł lub wrócił. Jak pada, apki się kilują, jak wsztaje, odpalają z powrotem. Nie dodałam przeglądarki celowo – bo po prostu czytam arty załadowane wcześniej. Swoją drogą, pozdrawiam z pociągu relacji Zielona Góra – Szczecin Główny:)