Press "Enter" to skip to content

Jak wygodnie korzystać z neta w pociągu

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:)