• Ja sowas gibt es hier jetzt zum drittenmal ^^
    Ich habe ein kleines Prog geschrieben, dass durch einen Countdown den Rechner herunterfährt.

    Eine Neuerung gegenüber anderen Shutdown-timern ist, dass auch die Veränderung eines Programmnamens als Shutdown-event hinzugezogen wird.
    Dadurch ist es z.B. möglich, dass nach Beenden eines Audiofiles in Winamp der Rechner herunterfährt.

    Bewerkstelligt wird dieses durch Kontrolle des Programmnamens, d.h. wenn z.B. Programme ihren Namen ändern.

    Mit dem Button "Monitor" wird das in der ComboBox angezeigte Programm überwacht. Ein weiterer Click beendet die Überwachung.

    Der Countdown und die Programmüberwachung laufen voneinander unabhängig.

    Mit dem Button "Aktualisieren" werden für die AuswahlComboBox die gegenwärtigen aktiven Programme erneuert.
    Mit dem Button "Minimieren" wird dieses Timer-tool im Systray versteckt.


    Wer mit diesem Programm rumexperimentieren will sollte die Shutdown-anweisung rausnehmen und stattdessen eine Messagebox verwenden


    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <GUIConstants.au3>
    #Include <Constants.au3>
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>

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

    $g_szVersion = "Shut-Down-Scheduler"
    $progname=$g_szVersion

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

    If WinExists ($g_szVersion) Then Exit
    AutoItWinSetTitle ($g_szVersion)
    Break (0)
    TraySetState ()
    TraySetToolTip ($progname)

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

    ;=======================GUI===========================================

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

    $statusdefault=" none selected"

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

    $main = GUICreate ($progname, 200, 220)

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

    ;ComboBox
    $Combo1 = GUICtrlCreateCombo ("---- wähle ----", 10, 10, 180, 200)
    Dim $ignorelist[3]
    $ignorelist[0] ="Program Manager"
    updatecombo()
    ;-----------------------------
    $infolabel= GUICtrlCreateLabel($statusdefault,12,35,180,55)

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

    $update = GUICtrlCreateButton ("Aktualisieren", 10, 90, 85) ; Update-Button

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

    ;Monitor
    $monitor=GUICtrlCreateButton ("Monitor", 105, 90, 85) ;Monitor-Button

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

    ;Timer-Eingabe
    $labelblank=GUICtrlCreateLabel("Hours Mins",12,130)

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

    $inputhour = GUICtrlCreateInput ("2",10,150, 40, 25, 0x0800) ;$ES_READONLY)
    $updown = GUICtrlCreateUpdown($inputhour)
    $inputmin = GUICtrlCreateInput ("00",60,150, 40, 25)
    $updown = GUICtrlCreateUpdown($inputmin,$ES_NUMBER)
    $timerlabel = GUICtrlCreateLabel("--:--",110,155,180)
    $Shutdownon = GUICtrlCreateButton ("Start Timer", 10, 182, 85)

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

    ;Minimize
    $min = GUICtrlCreateButton ("Minimieren", 105, 182, 85) ;Minimize-button

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

    GUISetState (@SW_SHOW)
    ;=============================GUI-Ende==================================

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

    $timer=0
    $monitoron=0

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

    While 1
    sleep(50)

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

    ;Überwachung über Programmnamen
    If $monitoron=1 Then
    $found=0
    $wl = WinList ()
    For $i = 1 To $wl[0][0]
    if $wl[$i][0] = $monitorhit Then $found=1
    Next
    If $found=0 then
    Shutdown(9)
    ;MsgBox(0,"shutdown now","now")
    Exit
    EndIf
    EndIf


    ;Shutdown-Timer
    If $timer=1 Then

    $diff=TimerDiff($begin)
    $countdown=$alarmtime-$diff
    GUICtrlSetData ( $timerlabel, int($countdown/1000) );Zeige

    If $diff>$alarmtime Then
    Shutdown(9)
    ;MsgBox(0,"shutdown now","now")
    $timer=0
    Exit
    EndIf
    EndIf


    $msg = GuiGetMsg ()
    $tmsg = TrayGetMsg ()

    Select
    Case $tmsg = $TRAY_EVENT_PRIMARYDOUBLE
    updatecombo ()
    WinSetState ($progname, "", @SW_SHOW)

    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop

    Case $msg = $GUI_EVENT_MINIMIZE
    WinSetState ("SetTrans", "", @SW_HIDE)

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

    Case $msg = $update
    updatecombo()

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

    case $msg = $inputhour
    $hour=GUICtrlRead($inputhour)
    If $hour<0 Then GUICtrlSetData($inputhour,0)

    Case $msg = $min
    WinSetState ($progname, "", @SW_HIDE)


    case $msg = $inputmin
    $minus=GUICtrlRead($inputmin)
    If $minus<0 Then GUICtrlSetData($inputmin,0)
    If $minus>59 Then GUICtrlSetData($inputmin,59)


    case $msg= $Shutdownon

    If $timer=0 Then
    $timer=1
    $alarmtime=1000*60*(GUICtrlRead($inputhour)*60+GUICtrlRead($inputmin))
    $begin = TimerInit()
    GUICtrlSetData ( $Shutdownon, "Stop Timer")
    Else
    $timer=0
    GUICtrlSetData ( $timerlabel, "--:--")
    GUICtrlSetData ( $Shutdownon, "Start Timer")
    EndIf


    Case $msg = $monitor
    $monitorprog=GUICtrlRead ($Combo1) ;Gewähltes Programm aus der Combo auslesen


    If $monitoron=0 Then

    $monitorhit=find_prog($monitorprog) ;Vollständiger Name für das gewählte Programm
    If $monitorhit<>"error" Then
    GUICtrlSetData ( $infolabel, $monitorhit)
    GUICtrlSetData ( $monitor, "Stop")
    $monitoron=1
    EndIf

    Else

    $monitoron=0
    GUICtrlSetData ( $infolabel, $statusdefault)
    GUICtrlSetData ( $monitor, "Monitor")
    EndIf

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

    EndSelect

    Wend
    Exit

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

    Func find_prog($name)
    $wl = WinList ()
    For $i = 1 To $wl[0][0]
    if StringLeft($wl[$i][0],30) = $name Then Return $wl[$i][0]
    Next
    Return "error"
    EndFunc

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

    Func updatecombo () ;aktualisiert die Combolist
    GUICtrlSetData ($Combo1, "")
    $wl = WinList ()
    $setcomb = "---- wähle ----|"
    For $i = 1 To $wl[0][0]
    if $wl[$i][0] <> "" And IsVisible($wl[$i][1]) AND myArraySearch($ignorelist, $wl[$i][0])=0 Then
    $split = StringSplit($wl[$i][0],"|")
    $setcomb = $setcomb & StringLeft ($split[1], 30) & "|"
    EndIf
    Next

    GUICtrlSetData ($Combo1, $setcomb, "---- wähle ----")
    EndFunc

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

    Func myArraySearch($feld, $value)
    $result = 0
    $split = StringSplit($value,"|")
    $value = $split[1]
    for $i = 0 to UBound($feld)-1
    If StringLeft ($value,30) = StringLeft($feld[$i],30) Then
    $result=1
    ExitLoop
    EndIf
    Next

    Return $result
    EndFunc

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

    Func IsVisible ($handle)
    If BitAnd (WinGetState ($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    6 Mal editiert, zuletzt von Unicom (29. Januar 2009 um 00:06)

  • Hey ich habe mir dein script mal so angeschaut, und finde es höchst interessant, der Button Monitor was bewirkt der da find ich mich iwie nicht so zurecht^^

  • Ja das Look & Feel ist etwas experimentell ^^

    Mit der Comboliste wählt man ein zu überwachendes Programm aus,
    dann drückt man den Button Monitor und der vollständige Name wird angezeigt (unter der ComboBox). Ändert sich dieser Programmname fährt der Rechner runter.
    Drückt man auf den Monitorbutton nochmals (der jetzt "Stopp" heißt), wird das Programm nicht mehr überwacht.

    Zum Testen würde ich statt einen Shutdown eine Messagebox anzeigen lassen ^^

  • Ich kenn den VLC Player nicht, aber ausprobieren ob sich der Programmname beim Abspielen ändert.

    Einfach mal den VLC starten und mit Shutdown-Tool sich mal den aktuellen Namen raussuchen.
    Dann irgendeine Mediadatei mit dem VLC abspielen und währendessen auf den "Aktualisieren" Button des Shutdown-Tools klicken und schauen ob und wie nun der VLC Player heisst. Nachdem die Mediendatei zu ende/bzw. gestoppt ist nochmal via Aktualisieren den exakten VLC Player Namen kontrollieren.

    Wenn sich die Namen ändern kann das Shutdown-Tool dies überwachen.