• Hi!

    Hab mal wieder ´n bissl rumprogrammiert und mir ein nettes Tool für meinen Homeserver gemacht.

    Das Tool soll den Server Herunterfahren/Neustarten.... sobald KEIN Traffik mehr auf der Netzwerkkarte gemessen werden kann. (Also der Server nicht benötigt wird (Download fertig o.ä.)). Dabei kann ein Timer angegeben werden nach dem der PC die gewünschte funktion ausführt.

    aero.zip

    Finde soetwas sehr praktisch! 8)

    Vielleicht kanns ja einer von euch auch etwas damit anfangen! ;)

    mfg. ISI360

  • Ja sry stimmt...würde auch keine fremden .exe Dateinen ausführen!

    Hab hier mal den Source-Code gepostet:

    [autoit]


    #include "Misc.au3"

    [/autoit][autoit][/autoit][autoit]

    $app = "IS - Net Checker"
    if _Singleton($app,1) = 0 Then
    Msgbox(16,"Fehler","IS - Net Checker läuft bereits!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    if FileExists ( "settings.ini" ) = 0 Then
    $file = FileOpen("settings.ini", 1)
    FileWriteLine($file, "#DIESE DATEI NICHT VERÄNDERN! ANSONSTEN KÖNNTE DEIN PC EXPLODIEREN! XD"&@CRLF)
    FileWriteLine($file, "[config]"&@CRLF)
    FileWriteLine($file, "autorun=false"&@CRLF)
    FileWriteLine($file, "action=PC Herunterfahren"&@CRLF)
    FileWriteLine($file, "minuten=5"&@CRLF)
    FileWriteLine($file, "limit=4"&@CRLF)
    FileClose($file)
    Traytip("IS - Net Checker","Hier klicken um Fenster anzuzeigen",10)
    endif

    [/autoit][autoit][/autoit][autoit]

    #include <Constants.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    TraySetToolTip("IS - Net Checker")
    Opt("GUIOnEventMode", 1)
    Opt("TrayMenuMode",1)
    Opt("TrayOnEventMode",1)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    Global $Inspeed
    Global $outspeed
    $inmax = 0
    $outmax = 0
    $lastin = 0
    $lastout = 0

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=g:\shutdowner.kxf
    $Fenster = GUICreate("IS - Net Checker", 429, 175, @DesktopWidth/2-(429/2),@Desktopheight/2-(175/2))
    WinSetOnTop($Fenster, "", 1)
    $Tab1 = GUICtrlCreateTab(8, 8, 417, 161)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Übersicht")
    $Group1 = GUICtrlCreateGroup("Shutdown Timer", 280, 104, 137, 57)
    GUICtrlCreateLabel(":", 353, 123, 12, 29)
    GUICtrlSetFont(-1, 16, 800, 0, "Tahoma")
    $Minutenzahl = GUICtrlCreateLabel(IniRead("settings.ini", "config", "minuten", "10"), 306, 123, 30, 29)
    GUICtrlSetFont(-1, 16, 800, 0, "Tahoma")
    $Sekundenzahl = GUICtrlCreateLabel("0", 374, 123, 30, 29)
    GUICtrlSetFont(-1, 16, 800, 0, "Tahoma")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateIcon("C:\WINDOWS\system32\shell32.dll", -14, 16, 128, 32, 32, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreateLabel("Downstream", 76, 122, 73, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Upstream", 192, 122, 57, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Downprogress = GUICtrlCreateProgress(96, 40, 25, 73,BitOR($PBS_VERTICAL,$PBS_SMOOTH))
    $Upprogress = GUICtrlCreateProgress(203, 41, 25, 73,BitOR($PBS_VERTICAL,$PBS_SMOOTH) )
    $DownstreamZahl= GUICtrlCreateLabel("0 KBps", 90, 141, 82, 17)
    $UPStreamZahl = GUICtrlCreateLabel("0 KBps", 199, 141, 80, 17)
    $TabSheet2 = GUICtrlCreateTabItem("Einstellungen")
    GUICtrlCreateLabel("Timer starten wenn sich Down/Up-stream unter", 16, 48, 227, 17)
    $TimerSchwelle = GUICtrlCreateInput(IniRead("settings.ini", "config", "limit", "3"), 248, 45, 33, 21,$ES_NUMBER)
    GUICtrlCreateLabel("kbps befinden", 288, 48, 71, 17)
    GUICtrlCreateLabel("Bei Ablauf des Timers:", 16, 79, 109, 17)
    $ShotdownBOX = GUICtrlCreateCombo("", 128, 76, 169, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "PC Herunterfahren|PC Herunterfahren (erzwingen)|PC neustarten|PC neustarten (erzwingen)|Standby Modus|Ruhezustand", IniRead("settings.ini", "config", "action", "PC Herunterfahren"))
    GUICtrlSetOnEvent(-1, "Toggle_Action")
    GUICtrlCreateLabel("Timer:", 15, 114, 33, 17)
    $TimeerVORGABE = GUICtrlCreateInput(IniRead("settings.ini", "config", "minuten", "10"), 52, 111, 33, 21,$ES_NUMBER)
    GUICtrlCreateLabel("Minuten", 91, 114, 42, 17)
    $Autostartbox = GUICtrlCreateCheckbox("IS - Net Checker mit Windows starten", 16, 136, 385, 25)
    if IniRead("settings.ini", "config", "autorun", "true") = "true" then GUICtrlSetState(-1,$GUI_CHECKED)
    if IniRead("settings.ini", "config", "autorun", "true") = "false" then GUICtrlSetState(-1,$GUI_UNCHECKED)
    GUICtrlSetOnEvent(-1, "Toggle_Autostart")
    $TabSheet3 = GUICtrlCreateTabItem("Info")
    GUICtrlCreateLabel("IS-Net Checker v. 1.0", 16, 40, 242, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Erstellt von Christian Faderl", 16, 62, 194, 117)
    GUICtrlCreateTabItem("")
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    TraySetOnEvent ($TRAY_EVENT_PRIMARYDOWN, "Show_Window" )
    GUISetOnEvent($GUI_EVENT_CLOSE, "minimize")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "minimize")

    [/autoit][autoit][/autoit][autoit]

    $exititem = TrayCreateItem("Beenden")
    TrayItemSetOnEvent (-1, "EXITT")
    TraySetClick(8)

    [/autoit][autoit][/autoit][autoit]

    func minimize()
    GUISetState(@SW_HIDE,$Fenster)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func EXITT()
    Save_Times()
    Exit
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func Show_Window()
    GUISetState(@SW_SHOW,$Fenster)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func Show_Minimenu()
    GUISetState(@SW_SHOW,$Fenster)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func Update_Streams()
    $colItems = $objWMIService.ExecQuery("SELECT BytesReceivedPersec,BytesSentPersec,Name,BytesTotalPersec FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then

    For $objItem In $colItems
    $in = $objItem.BytesReceivedPersec
    $NW_Cardname = $objItem.Name
    $Total = $objItem.BytesTotalPersec
    $newin = $objItem.BytesReceivedPersec
    $newout = $objItem.BytesSentPersec
    if $lastin = 0 and $lastout = 0 Then
    $lastin = $newin
    $lastout = $newout
    endif
    $Inspeed = $newin - $lastin
    $outspeed = $newout - $lastout
    $lastin = $newin
    $lastout = $newout
    Select
    Case $in < 1024
    $in = $in&' Byte'
    Case $in > 1023 And $in< 1048575
    $in = Round($in/1024,2)&' KB'
    Case $in > 1048575
    $in = $in/1024
    $in = Round($in/1024,2)&' MB'
    EndSelect
    $out = $objItem.BytesSentPersec
    Select
    Case $out< 1024
    $out = $in&' Byte'
    Case $out > 1023 And $out< 1048575
    $out = Round($out/1024,2)&' KB'
    Case $out > 1048575
    $out= $out/1024
    $out = Round($out/1024,2)&' MB'
    EndSelect
    Global $intext = int(Round($Inspeed/1024,0))
    Global $outtext = int(Round($outspeed/1024,0))
    GUICtrlSetData ($DownstreamZahl,$intext&" KBps")
    GUICtrlSetData ($UPStreamZahl,$outtext&" KBps")
    GUICtrlSetData($Downprogress, ($intext/5))
    GUICtrlSetData($Upprogress, ($outtext/3))
    ExitLoop
    Next
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    func Zerochecker()
    if guictrlread($TimeerVORGABE) = "0" then guictrlsetdata($TimeerVORGABE,"1")
    if guictrlread($TimerSchwelle) < 2 then guictrlsetdata($TimerSchwelle,"2")
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func Toggle_Action()
    IniWrite("settings.ini", "config", "action", guictrlread($ShotdownBOX))
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func Save_Times()
    IniWrite("settings.ini", "config", "minuten", guictrlread($TimeerVORGABE))
    IniWrite("settings.ini", "config", "limit", guictrlread($TimerSchwelle))
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func Und_Action() ;XD
    if guictrlread($ShotdownBOX) = "PC Herunterfahren" then Shutdown(9)
    if guictrlread($ShotdownBOX) = "PC Herunterfahren (erzwingen)" then Shutdown(13)
    if guictrlread($ShotdownBOX) = "PC neustarten" then Shutdown(2)
    if guictrlread($ShotdownBOX) = "PC neustarten (erzwingen)" then Shutdown(6)
    if guictrlread($ShotdownBOX) = "Standby Modus" then Shutdown(32)
    if guictrlread($ShotdownBOX) = "Ruhezustand" then Shutdown(64)
    exit ;byebye!
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func Toggle_Autostart()
    if GUICtrlRead ($Autostartbox) = $GUI_CHECKED then
    FileCreateShortcut(@AutoItExe,@StartupDir&"\IS-Networkchecker.lnk", @WorkingDir)
    IniWrite("settings.ini", "config", "autorun", "true")
    else
    FileDelete (@StartupDir&"\IS-Networkchecker.lnk")
    IniWrite("settings.ini", "config", "autorun", "false")
    endif
    endfunc

    [/autoit][autoit][/autoit][autoit]

    Toggle_Autostart()
    AdlibEnable("Save_Times",10000)
    AdlibEnable("Zerochecker",100)

    [/autoit][autoit][/autoit][autoit]

    While 1
    Update_Streams()
    sleep(500)
    if $intext < guictrlread($TimerSchwelle) AND $outtext < guictrlread($TimerSchwelle) Then

    [/autoit][autoit][/autoit][autoit]

    if guictrlread($Sekundenzahl) > 0 Then
    GUICtrlSetData ($Sekundenzahl,guictrlread($Sekundenzahl)-1)
    Else
    GUICtrlSetData ($Minutenzahl,guictrlread($Minutenzahl)-1)
    GUICtrlSetData ($Sekundenzahl,59)
    endif

    [/autoit][autoit][/autoit][autoit]

    Else
    GUICtrlSetData ($Minutenzahl,guictrlread($TimeerVORGABE))
    GUICtrlSetData ($Sekundenzahl,"0")
    endif

    [/autoit][autoit][/autoit][autoit]

    if guictrlread($Sekundenzahl) = 0 AND guictrlread($Minutenzahl) = 0 then Und_Action()
    sleep(500)
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    ...und sorry für mein Durcheinander im Skript! :D

    • Offizieller Beitrag

    Habs jetzt noch nicht getestet, aber mal ein Tipp:
    Du kannst deine Case-Abfrage zum Speed vereinfachen.

    [autoit]

    ; statt:
    Case $in > 1023 And $in< 1048575

    [/autoit][autoit][/autoit][autoit]

    ; reicht völlig:
    Case $in< 1048575
    ; denn falls $in < 1024, wird ja schon der Code im vorhergehenden
    ; Case-Zweig (Case $in < 1024) ausgeführt
    ; dasselbe bei $out

    [/autoit]