@faux: erstmal danke für den Tipp, ich hab das Ganze folgendermaßen umgesetzt:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
(...)
Delphi-Quellcode:
function ExitWin(flag:word): Boolean;
var vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
(...)
Delphi-Quellcode:
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
LookupPrivilegeValue(
nil,'
SeShutdownPrivilege',
tp.Privileges[0].Luid);
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
h := 0;
AdjustTokenPrivileges(hToken,False,
tp,0,PTokenPrivileges(
nil)^,h);
CloseHandle(hToken);
(...)
Delphi-Quellcode:
if flag = 0 then
result := setsystempowerstate(true,true);
end
Für das Tool übergebe ich mit flag entweder die Werte für das Herunterfahren, Neustarten etc. oder eben den Wert 0 für Standby und 1 für den Ruhezustand...
Obwohl ich ein Delphi - 32 Projekt gestartet habe (sonst würde ja auch das Herunterfahren nicht funktionieren), kann ich trotzdem weder den Ruhezustand noch den Standbyzustand herbeirufen.
Ist eventuell ein Fehler im Code, den ich aus Betriebsblindheit übersehen habe?
Maze