, ,

PC nach Beenden des Downloads automatisch herunterfahren

Grössere Downloads möchte ich meist nicht über den Tag machen, wo die Internetleitung frei sein soll. Über Nacht wäre praktischer, aber den PC die ganze Nacht laufen lassen ist auch keine Option.

AutoIt ist eine coole kleine Lösung für solche Lösungen.

Das Script überwacht alle gefundenen Netzwerkkarten und schaut wieviel Daten heruntergeladen werden. Könnte natürlich auch für Upload angepasst werden, aber in meinem Fall habe ich dies ignoriert.
Sollte man es versehentlich gestartet haben und möchte das Tool beenden, kann man dies einfach mit ESC machen.

#NoTrayIcon
#AutoIt3Wrapper_icon=hibernate-icon.ico
HotKeySet("{ESC}", "_Terminate")

; Settings:
$MaxIdleTime = 300    ; in Secounds (don't go to low, as "some" Traffic is always)
$SpeedTreshhold = 300 ; in kB/s

$PCCode = 64   ; 5  Force Shutdown
               ; 32 Stand-By
               ; 64 Hibernate


; Dont modify below
$run = 1
$idletime = 0;
While $run >= 1
	; get all Networkcards
	$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
	$objClass = $objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")

	$x = 0
	Local $start = [0,0,0,0,0,0,0]
	For $obj in $objClass
		$start[$x] = $obj.BytesReceivedPerSec
		$x += 1
	Next

	; Check 1s later how many bytes have been downloaded (diffrence between totals)
	Sleep(1000)

	$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
	$objClass = $objWMIService.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface")
	$x = 0
	$end = 0
	For $obj in $objClass
		$end += round(($obj.BytesReceivedPerSec - $start[$x]) / 1024,2)
		$x += 1
	Next

	; See if threshhold has been reached
	If $end <= $SpeedTreshhold Then
		$idletime += 1

		; dont shutdown becase of one occurence, wait for 5 min inactivity
		if $idletime >= $MaxIdleTime Then
			$run = 0
			ToolTip ("Hibernate PC" , @DeskTopWidth - 250 , @DeskTopHeight - 75, "Hibernate after Shutdown" )
			Shutdown($PCCode)
		Else
			ToolTip ("Hibernate Countdown: " & $MaxIdleTime - $idletime & " s" , @DeskTopWidth - 250 , @DeskTopHeight - 75, "Hibernate after Shutdown" )
		EndIf
	Else
		ToolTip ("Download Speed: " & $end & " kB/s" , @DeskTopWidth - 250 , @DeskTopHeight - 75, "Hibernate after Shutdown" )
		$idletime = 0
	EndIf
Wend


Func _Terminate()
	Exit
EndFunc

Natürlich stelle ich auch gleich die kompilierte Version als EXE bereit: HibernateafterDownload.zip