7.10.2004 03:05
Tean(Delphi 6.0) Mam tento kod (len dolezite casti) na vypnutie PC
if radiobutton1.checked then SetSystemPowerState(True, True);//uspanie PC
if radiobutton2.checked then exitwindowsex(EWX_POWEROFF, 0);//vypnutie PC
if radiobutton3.checked then exitwindowsex(EWX_REBOOT,0);//reboot
a windows XP mi vypne alebo restartuje len vtedy, ak bol system naposledy vypnuty alebo restartovany tzn, ze ak ho chcem vypnut mojim programom a on mal posledny prikaz RESTARTOVAT (v ponuke START//VYPNOUT...) tak sa len restartuje. Vzdy to zavisi od mojho posledneho vypnutia PC. Kde je problem?
program tiez obsahuje ziadost o pridelenie prav:
procedure TUsage.AdjustPrivileges;
var LastErr: Integer;
Tok: THandle;
TokPriv, Prev: TTokenPrivileges;
RetLen:DWORD;
begin
TokPriv.PrivilegeCount:= 1;
TokPriv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
if not LookupPrivilegeValue(nil, PChar(SE_SHUTDOWN_NAME), TokPriv.Privileges[0].Luid) then
showmessage('Failed');
if not OpenProcessToken(GetCurrentProcess, TOKEN_READ or TOKEN_WRITE, Tok) then
showmessage('Failed');
AdjustTokenPrivileges(Tok, False, Tokpriv, SizeOf(Prev), Prev, RetLen);
LastErr:= GetLastError;
if LastErr <> ERROR_SUCCESS then
begin
SetLastError(LastErr);
; showmessage('Failed');
end;
end;
if radiobutton1.checked then SetSystemPowerState(True, True);//uspanie PC
if radiobutton2.checked then exitwindowsex(EWX_POWEROFF, 0);//vypnutie PC
if radiobutton3.checked then exitwindowsex(EWX_REBOOT,0);//reboot
a windows XP mi vypne alebo restartuje len vtedy, ak bol system naposledy vypnuty alebo restartovany tzn, ze ak ho chcem vypnut mojim programom a on mal posledny prikaz RESTARTOVAT (v ponuke START//VYPNOUT...) tak sa len restartuje. Vzdy to zavisi od mojho posledneho vypnutia PC. Kde je problem?
program tiez obsahuje ziadost o pridelenie prav:
procedure TUsage.AdjustPrivileges;
var LastErr: Integer;
Tok: THandle;
TokPriv, Prev: TTokenPrivileges;
RetLen:DWORD;
begin
TokPriv.PrivilegeCount:= 1;
TokPriv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
if not LookupPrivilegeValue(nil, PChar(SE_SHUTDOWN_NAME), TokPriv.Privileges[0].Luid) then
showmessage('Failed');
if not OpenProcessToken(GetCurrentProcess, TOKEN_READ or TOKEN_WRITE, Tok) then
showmessage('Failed');
AdjustTokenPrivileges(Tok, False, Tokpriv, SizeOf(Prev), Prev, RetLen);
LastErr:= GetLastError;
if LastErr <> ERROR_SUCCESS then
begin
SetLastError(LastErr);
; showmessage('Failed');
end;
end;