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
#include <Date.au3>
#include <GUIConstants.au3>
#Include <Constants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
$g_szVersion = "Shut-Down-Scheduler"
$progname=$g_szVersion
If WinExists ($g_szVersion) Then Exit
AutoItWinSetTitle ($g_szVersion)
Break (0)
TraySetState ()
TraySetToolTip ($progname)
;=======================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)
$update = GUICtrlCreateButton ("Aktualisieren", 10, 90, 85) ; Update-Button
[/autoit] [autoit][/autoit] [autoit];Monitor
$monitor=GUICtrlCreateButton ("Monitor", 105, 90, 85) ;Monitor-Button
;Timer-Eingabe
$labelblank=GUICtrlCreateLabel("Hours Mins",12,130)
$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)
;Minimize
$min = GUICtrlCreateButton ("Minimieren", 105, 182, 85) ;Minimize-button
GUISetState (@SW_SHOW)
;=============================GUI-Ende==================================
$timer=0
$monitoron=0
While 1
sleep(50)
;Ü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)
Case $msg = $update
updatecombo()
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
EndSelect
Wend
Exit
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
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
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
Func IsVisible ($handle)
If BitAnd (WinGetState ($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc