Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Audio a domácí kina
Kamery
Multimediální centra
Projektory
Streaming videa
Televize
Ostatní
O nás  |  Napište nám
Facebook  |  Twitter
Svět hardware  |  Digimanie
Svět mobilně  |  Svět audia

Téma: Delphi 6.0

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;
8.10.2004 09:45
MikePři vypnutí PC dávám (EWX_POWEROFF or EWX_SHUTDOWN), jinak pouzivam presne toto:

function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;

function WinExit(flags: integer): boolean;
begin
Result := True;
SetPrivilege('SeShutdownPrivilege', true);
if not ExitWindowsEx(flags, 0) then
Result := False;
SetPrivilege('SeShutdownPrivilege', False);
end;

function ShutDownComputer(restart:boolean; force:boolean):boolean;
var flags:integer;
begin
if restart then flags:=EWX_REBOOT else flags:=EWX_POWEROFF or EWX_SHUTDOWN;
if force then flags:=flags or EWX_FORCE;
PrepareForClose;
result:=WinExit(flags);
end;
8.10.2004 09:52
TeanVdake Mike, zapracujem to do mojho programu a otestujem.
Dam vediet
:BB: :BB: :BB:
13.10.2004 09:33
TeanTak nic. Tvoj kod som zapracoval do mojho programu a sprava sa to rovnako, ale uz mam podozrenie.
Ked instalujem nejake programy a tie potom ziadaju restart, potvrdim im OK -restart a pocitac sa vypne UPLNE. Ked dam v mojom programe Vypnut a system bol naposledy restartovany, tak dojde k restartu windows. Nepaci sa mi spravanie toho mojho PC.

pouzil som toto volanie:
ShutDownComputer(false,false) - pre vypnutie
ShutDownComputer(true,false) - pre restart

Program som si odkrokoval, presiel krasne cez vsetky funkcie.Tak neviem