Windows reboot/de
From Free Pascal wiki
Jump to navigationJump to search
│
Deutsch (de) │
Zurück zur Seite Code Beispiele.
Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.
Die Prozedur beendet bzw. rebootet Windows.
{
Bedeutung der Windowskonstanten:
EWX_LOGOFF
Alle Prozesse des Benutzers werden beendet.
Der Benutzer wird abgemeldet.
EWX_POWEROFF
Fährt Windows herunter und setzt den Computer in den StandBy-Modus.
(Die Hardware muss dies unterstützen)
EWX_REBOOT
Fährt Windows herunter und startet es neu
EWX_SHUTDOWN
Fährt Windows herunter
EWX_FORCE
Beendet die Prozesse ohne Rückfrage
EWX_FORCEIFHUNG
Beendet Prozesse mit vorheriger Nachfrage
}
...
uses
SysUtils, Windows, Dialogs, ...;
...
const
//Soft-Variante
Logoff = EWX_LOGOFF or EWX_FORCEIFHUNG;
StandBy = EWX_POWEROFF or EWX_FORCEIFHUNG;
Reboot = EWX_REBOOT or EWX_FORCEIFHUNG;
Shutdown = EWX_SHUTDOWN or EWX_FORCEIFHUNG;
//Harte-Variante
Logoff_F = EWX_LOGOFF or EWX_FORCE;
StandBy_F = EWX_POWEROFF or EWX_FORCE;
Reboot_F = EWX_REBOOT or EWX_FORCE;
Shutdown_F = EWX_SHUTDOWN or EWX_FORCE;
...
implementation
...
function funExitWindows(lwdRebootParam: longword): boolean;
var
hToken: THandle;
TokenPvg1: TTokenPrivileges;
TokenPvg2: TTokenPrivileges;
wrdGroesseTokenPvg2: DWORD;
wrdPcbtpPreviousRequired: DWORD = 0;
blnRueckgabe: boolean;
begin
Result := False;
try
blnRueckgabe := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
if blnRueckgabe = True then
begin
blnRueckgabe := LookupPrivilegeValue(nil, 'SeShutdownPrivilege',
TokenPvg1.Privileges[0].Luid);
TokenPvg1.PrivilegeCount := 1;
TokenPvg1.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
wrdGroesseTokenPvg2 := SizeOf(TokenPvg2);
if blnRueckgabe = True then
Windows.AdjustTokenPrivileges(hToken, False, TokenPvg1,
wrdGroesseTokenPvg2, TokenPvg2, wrdPcbtpPreviousRequired);
end;
Result := ExitWindowsEx(RebootParam, 0);
except
ShowMessage('Beim Herunterfahren von Windows ist ein Fehler aufgetreten');
end;
end;
...
Beispiel für einen Aufruf der Prozedur:
...
subExitWindows(Shutdown);
...