Shut in time down
Verfasst: 22.11.2005 18:17
Diese Tool habe ich programmiert da ich mienen Rechner erstens gerne im Ruhezustand habe (Schnelleres Hochfahren) und ich gerne mir noch ein Film ansehe wo ich dann auch gerne mal einschlafe. Damit der Computer nicht die ganze Nacht läuft habe ich das mit der Zeitabfrage gemacht. Man kann aber auch die Aktion sofort durchfürhen lassen.
Ja ich weis es gibt schon 1000 solcher Tool's aber ich möchte ja lernen mit BP umzugehen und zudem ist das mein erstes Tool das ich selber progrmmiert habe *g*.
Hier der Quellcode:
Wie man sehen kann habe ich auch alles fleisig kommentiert damit auch andere Anfänger fieleict darin was verstehen.
PS: Bei Win9x kommt die Meldung das "Ruhezustand" nicht unterstützt wird da es bei Win 9x noch nicht unterstützt wird.
MfG:
Kain
Ja ich weis es gibt schon 1000 solcher Tool's aber ich möchte ja lernen mit BP umzugehen und zudem ist das mein erstes Tool das ich selber progrmmiert habe *g*.
Hier der Quellcode:
Code: Alles auswählen
;-------------------------------->>>Fenster<<<--------------------------------------------------------
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Frame3D_0
#String_0
#String_1
#String_2
#Button_0
#Button_1
#Button_2
#Combo_0
#Text_1
#Text_3
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 244, 47, 160, 171, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Auschaltenum XX Uhr v.1.0")
If CreateGadgetList(WindowID())
Frame3DGadget(#Frame3D_0, 10, 0, 140, 160, "")
StringGadget(#String_0, 30, 100, 30, 20, "", #PB_String_Numeric)
SendMessage_(GadgetID(#String_0), #EM_LIMITTEXT, 2, 0)
StringGadget(#String_1, 70, 100, 30, 20, "", #PB_String_Numeric)
SendMessage_(GadgetID(#String_1), #EM_LIMITTEXT, 2, 0)
StringGadget(#String_2, 110, 100, 30, 20, "", #PB_String_Numeric)
SendMessage_(GadgetID(#String_2), #EM_LIMITTEXT, 2, 0)
ButtonGadget(#Button_0, 30, 130, 50, 20, "Start")
ButtonGadget(#Button_1, 90, 130, 50, 20, "Abbruch")
ButtonGadget(#Button_2, 13, 8, 135, 20, "Aktion sofort durchführen")
ComboBoxGadget(#Combo_0, 40, 50, 90, 100)
AddGadgetItem(#Combo_0,-1, "Herunterfahren")
AddGadgetItem(#Combo_0,-1, "Neustart")
AddGadgetItem(#Combo_0,-1, "Ruhezustand")
SetGadgetState(#Combo_0, 0)
TextGadget(#Text_1, 40, 30, 80, 20, "Timer Einstellung")
TextGadget(#Text_3, 60, 105, 5, 5, "")
EndIf
EndIf
EndProcedure
;-----------------------------------------------------------------------------------------------------
;----------------------------->>>Programm Start>>>----------------------------------------------------
Open_Window_0() ;Fenster öffnen
;//////////////////////Herunterfahren, Neustart, Abmelden, Ruhezustand Script\\\\\\\\\\\\\\\\\\\\\\\\\
Procedure EnableShutDown()
Privileges.TOKEN_PRIVILEGES
OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
Privileges\PrivilegeCount = 1
Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
CloseHandle_(hToken)
EndProcedure
Procedure LogOffControl(flag.l)
EnableShutDown()
Select flag.l
Case 1
ExitWindowsEx_(#EWX_LOGOFF,1)
Case 2
ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_POWEROFF,0)
Case 3
ExitWindowsEx_(#EWX_POWEROFF,0)
Default
ExitWindowsEx_(#EWX_REBOOT,0)
EndSelect
EndProcedure
;//////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Repeat ;Schleife Starten
Time.l = Date() ;System Zeit in die Variabel "Time" einlesen
HH$ = FormatDate("%hh", Time) ;Stunde in Variabel "HH$" von "Time" übernehmen
MM$ = FormatDate("%ii", Time) ;Minute in Variabel "MM$" von "Time" übernehmen
SS$ = FormatDate("%ss", Time) ;Sekunde in Variabel "SS$" von "Time" übernehmen
If HH$=GetGadgetText(#String_0) ;Stunde muss mit der Eingabe übereinstimmen
If MM$=GetGadgetText(#String_1) ;Minute muss mit der Eingabe übereinstimmen
If SS$=GetGadgetText(#String_2) ;Sekunge muss mit der Eingabe übereinstimmen
If go=1 ;Die Variabel "go" muss 1 ergeben (Go bekommt den wert 1 bi betätigen des OK Buttons)
If GetGadgetState(#Combo_0)=0 ;ComboBox Muss auf Herunterfahren stehen
LogOffControl(3);Befehl zum Herunterfahren
ElseIf GetGadgetState(#Combo_0)=1 ;ComboBox muss auf Neustart stehen
LogOffControl(0); Befehl zum Neustart
ElseIf GetGadgetState(#Combo_0)=2 ;ComboBox muss auf Ruhezustand stehen
If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState") ;Überprüfung ob das System Ruhezustand unterstützt
erg=CallFunction(0,"IsPwrHibernateAllowed") ;Varabel erg bekommt den Wert 0 oder 1
If erg=0 ;Die Variabel "erg" muss 0 haben
MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!") ;Meldung das, dass System den Ruhezustand nicht unterstützt
Else ;Anderer Fall (erg muss einen anderen Wert als wie 0 aufweisen)
CallFunction(0,"SetSuspendState",1,0,0) ;Befehl für den Ruhezustand
Gosub Ende
Return
EndIf ;Ende der Bedingung
CloseLibrary(0) ;Ende der Überprüfung
EndIf ;Ende der Bedingung
EndIf ;Ende der Bedingung
go.l=0 ;Die Variabel go bekommt den Wert 0 weil nicht mehr weiter abgefragt werden muss
EndIf ;Ende der Bedingung
EndIf ;Ende der Bedingung
EndIf ;Ende der Bedingung
EndIf ;Ende der Bedingung
Delay(1) ;Warten 1 milli Sekunde
Event = WindowEvent() ;Program wird auf ein Eventvorbereitet
Select Event ;Aktion für ein Event
Case #PB_EventGadget ; verzweigung bei Gadgetevents
Select EventGadgetID() ;Starten der Button abfrage
Case (#Button_0) ;Button "OK"
If go=1
MessageRequester ("Info","Der Timer ist bereits gestartet!")
Else
go.l=1 ;Ok wurde gedrückt und die Variabel go erhält den Wert 1
EndIf
Case (#Button_1) ;Button "Abbrechen"
If go=1
MessageRequester ("Info","Timer ist gestopt.")
go.l=0
Else
Gosub Ende ;Abbruch wurde gedrückt und der Befehl "gosub" lässt das Programm zur kennzeichnung "Ende" springen
Return ;damit Gosub wirksam wird
EndIf
Case (#Button_2) ;Button "Aktion sofort durchführen"
Result = MessageRequester("Frage","Möchten Sie die Aktion wirklich durchführen?",#PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_Yes ; Ja-Schalter wurde gedrückt
If GetGadgetState(#Combo_0)=0 ;ComboBox Muss auf Herunterfahren stehen
LogOffControl(3);Befehl zum Herunterfahren
ElseIf GetGadgetState(#Combo_0)=1 ;ComboBox muss auf Neustart stehen
LogOffControl(0); Befehl zum Neustart
ElseIf GetGadgetState(#Combo_0)=2 ;ComboBox muss auf Ruhezustand stehen
If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState") ;Überprüfung ob das System Ruhezustand unterstützt
erg=CallFunction(0,"IsPwrHibernateAllowed") ;Varabel erg bekommt den Wert 0 oder 1
If erg=0 ;Die Variabel "erg" muss 0 haben
MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!") ;Meldung das, dass System den Ruhezustand nicht unterstützt
Else ;Anderer Fall (erg muss einen anderen Wert als wie 0 aufweisen)
CallFunction(0,"SetSuspendState",1,0,0) ;Befehl für den Ruhezustand
Gosub Ende
Return
EndIf ;Ende der Bedingung
Else ; Nein-Schalter wurde gedrückt
EndIf
EndIf
EndIf
EndSelect ;Ende der abfrage
EndSelect ;Ende der abfrage
Until Event = #PB_EventCloseWindow ;Fenster wird geschlossen
Ende: ;Gosub Kennzeichnung
End ;Ende Des Programms
PS: Bei Win9x kommt die Meldung das "Ruhezustand" nicht unterstützt wird da es bei Win 9x noch nicht unterstützt wird.
MfG:
Kain