#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
#include <GUIConstantsEx.au3>
const $wbemFlagReturnImmediately = 0x10
const $wbemFlagForwardOnly = 0x20
const $size = 150
const $delay = 1
const $InactiveTime = 300 ;Was 900
const $BellTime = 36
$TTS = 0
dim $data[$size+1]
$colItems = ""
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
func _GetBW()
$colItems = $objWMIService.ExecQuery("SELECT BytesReceivedPersec,BytesSentPersec FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$newin = $objItem.BytesReceivedPersec
$newout = $objItem.BytesSentPersec
Next
EndIf
Return $Newout + $newin
EndFunc
$Startval = _GetBW()
for $i = 0 to $size
$data[$i] = $Startval
Next
GUICreate("Bandwidth Monitor",220,130,0,0,-1,BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
$label1 = GUICtrlCreateLabel ( "Waiting for data...", 10, 5,200,20)
$progressbar1 = GUICtrlCreateProgress (10,20,200,20,$PBS_SMOOTH)
GUICtrlSetColor($progressbar1, 0xff0000)
$label2 = GUICtrlCreateLabel ( "Waiting for data...", 10, 50,200,20)
$progressbar2 = GUICtrlCreateProgress (10,65,200,20,$PBS_SMOOTH)
$InactiveShutDown = GUICtrlCreateCheckbox("Hibernate", 10, 90)
$InputCutOff = GUICtrlCreateInput ( 5, 100, 90 , 30, 20)
GUISetState ()
$tm = 0
while 1
sleep ($delay*1000-50)
$Cutoff = GUICtrlRead ($InputCutOff)
for $i = $size to 1 step -1
$data[$i] = $data[$i-1]
Next
if $tm<$size then $tm += 1
$data[0] = _GetBW()
GUICtrlSetData ($progressbar1,($data[0]-$data[$size])/$tm/512/$delay)
GUICtrlSetData ($label1, int($tm/$size*100) & "%" & " " & round(($data[0]-$data[$size])/$tm/1024/$delay,2))
GUICtrlSetData ($progressbar2,($data[0]-$data[1])/512/$delay)
GUICtrlSetData ($label2, int($TTS/$InactiveTime*100) & "%" & " " & round(($data[0]-$data[1])/1024/$delay,2))
if ($data[0]-$data[$size])/$tm/1024/$delay < $Cutoff and GUICtrlRead ( $InactiveShutDown ) = $GUI_CHECKED then
$TTS += 1
if mod($TTS,$BellTime)=0 Then SoundPlay(@WindowsDir & "\media\Windows Notify.wav")
if $TTS > $InactiveTime Then
$m = MsgBox(1,"Shutdown","Hibernating in 15 seconds",15)
if $m = 2 then
$TTS = 0
Else
Shutdown(64)
Exit
EndIf
EndIf
Else
$TTS = 0
EndIf
for $j = 1 to 10
if GUIGetMsg() = $GUI_EVENT_CLOSE then Exit
Next
WEnd