Hallo,
ich habe eine Funktion, die Windows mittels InitiateSystemShutdown herunterfährt und diesen Vorgang auch erzwingt, unabhängig von den offenen Applikationen. Da dieser Shutdown allerdings bei 10 Prozent Restladung der Notebook-Batterie stattfinden soll, ist es nicht in Ordnung, wenn Windows die inzwischen im Hintergrund heruntergeladenen Updates während des Shutdowns installieren möchte - dafür könnte die Restladung nicht ausreichen.
Daher nun die Frage, wie ich möglichst mit der gleichen Funktion InitiateSystemShutdown den Shutdown durchführen kann, ohne eventuell heruntergeladene Windows-Updates zu installieren? Im Startmenü existiert so eine Option ja, da stelle ich mir vor, dass es einen entsprechenden
API-Aufruf dafür geben muss.
Vielen Dank für Eure Hilfe.
Delphi-Quellcode:
function WindowsShutDown(Computer : string; Msg : string; Time: Word; Force : Boolean; Reboot: Boolean) : Boolean;
var rl, hToken : Cardinal;
tkp : TOKEN_PRIVILEGES;
begin
Result:=False;
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.') else
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
begin
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount:=1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
if GetLastError <> ERROR_SUCCESS then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.') else
begin
Result:=InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot);
if Result = False then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.');
end;
end else ShowMessage('Fehler beim Windows-Shutdown aufgetreten.');
end;
end;