[Win32] - Shutdown, Restart, LogOff, Standby per API
Übersicht

![]() |
d-bugBetreff: [Win32] - Shutdown, Restart, LogOff, Standby per API |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
aus meinem kleinen OSX-Shutdowndialog-Klon - ChaosShut stelle ich euch mal folgende kleine lib zur Verfügung. Die Funktionen sind auf jeden Fall für XPproofed, wurden aber auf Vista noch nicht getestet. ACHTUNG Ihr solltet auf JEDEN Fall während des Programmierens mit diesen Funktionen den Debug-Modus anschalten, sonst fahrt ihr euch dauernd den Rechner runter... Code: [AUSKLAPPEN] 'Shutdownlib
?win32 Import "-lkernel32" Import "-ladvapi32" ? '-- INITIALISIERUNG -- Extern "Win32" Function OpenProcessToken (ProcessHandle:Int, DesiredAccess:Int, TokenHandle:Byte Ptr) Function LookupPrivilegeValue (lpSystemName$z, lpName$z, lpLuid:Byte Ptr) = "LookupPrivilegeValueA@12" Function AdjustTokenPrivileges (TokenHandle:Int, DisableAllPrivileges:Int, NewState:Byte Ptr,BufferLength:Int, PreviousState:Byte Ptr, ReturnLength:Byte Ptr) Function GetVersion () Function GetCurrentProcess () Function SetSystemPowerState (fSuspend:Int, fForce:Int) Function ExitWindowsEx (uFlags:Int,dwReserved:Int=0) Function GetLastError () End Extern Private Function EnableShutdownPrivileges:Int () ?win32 Const TOKEN_ADJUST_PRIVILEGES:Int = $20 Const TOKEN_QUERY:Int = $8 Const SE_PRIVILEGE_ENABLED:Int = $2 Local tokenPrivilege:Int[4] If LookupPrivilegeValue(Null, "SeShutdownPrivilege", Byte Ptr(tokenPrivilege)+4) Local hProc:Int = GetCurrentProcess() ' -1 Local hToken:Int If OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, Varptr(hToken)) tokenPrivilege[0] = 1 tokenPrivilege[3] = SE_PRIVILEGE_ENABLED If AdjustTokenPrivileges(hToken, False, Byte Ptr(tokenPrivilege), Null, Null, Null) Return True EndIf EndIf EndIf ? End Function Public 'Rechner in Hibernation versetzen Function ForceHibernation () ?debug WriteStdout("Hibernate") ; End ?win32 If EnableShutdownPrivileges() SetSystemPowerState(True, False) EndIf ? End Function 'Rechner in StandBy versetzen Function ForceStandby () ?debug WriteStdout("Standby") ; End ?win32 If EnableShutdownPrivileges() SetSystemPowerState(False, False) EndIf ? End Function 'Benutzer ausloggen Function ForceLogOff () ?debug WriteStdout("LogOff") ; End ?win32 If EnableShutdownPrivileges() ExitWindowsEx $0 | $4 * False EndIf ? End Function 'Rechner herunterfahren Function ForceShutdown () ?debug WriteStdout("Shutdown") ; End ?win32 If EnableShutdownPrivileges() ExitWindowsEx $8 | $4 * False EndIf ? End Function 'Rechner neu starten Function ForceRestart () ?debug WriteStdout("Restart") ; End ?win32 If EnableShutdownPrivileges() ExitWindowsEx $2 | $4 * False EndIf ? End Function |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
d-bug, wäre es nich schöner, den shutdown-Befehl zu nehmen? Der geht auf jeden Fall auf jedem Windows=>2000.
Herunterfahren: shutdown -s -t 00 Neustart: shutdown -r -t 00 Logoff: shutdown -l -t 00 Wenn man noch -f angibt, werden alle Anwendugen ohne Test und Warnung gekillt. MfG |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Halte ich für Geschmacksache und ich lernte viel daraus... ![]() Zur Erkärung: Es gibt in OSX-Klon Kreisen ein Programm namens iShut, dass sich in Shutdown.exe umbenennen lässt und somit die gleiche Funktion wie das Original erfüllt. Sollte einer meiner ChaosShut-"Kunden" dieses installiert haben, würde er dann zwangsläufig erst meinen Dialog und dann den von iShut sehen. Außerdem hatte ich eigentlich mal geplant gehabt den original Shutdown-Dialog von Windows duch ChaosShut ersetzen zu lassen, änderte aber rasch meinen Plan, weil ich den benötigten Functionhook nicht hin bekam. Dann hätte ich sowieso auf ExitWindowsEx hooken müssen... hat sich aber jetzt alles für mich erledigt! Siehe Sig. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group