Ĺadny brzuch
Interesuje mnie jakim poleceniem zrestartowac komputer w delphi3.
Znalazłam polecenie :"Win32Check(ExitWindowsEx(EWX_REBOOT, 0));" ale jak uruchamiam program to wyskakuje błąd: klient nie ma wymaganych uprawnień
Justyna
http://www. ks-eksper...sp?T...=restart,delphi
http://www.ks-eksper...sp?T...=restart,delphi
Ps. przycisk szukaj się kłania to tak na przyszłość;)
Asdef
Ty Asdef nie bądź taki mądry. Po to są forum żeby przycisku Szukaj nie używać
Peace on earth, war on net...
Użyłam procedury:
procedure TForm1.Button1Click(Sender: TObject);
var h_Token : THandle;
tp : TTokenPrivileges;
pvs : PTokenPrivileges;
retval: Cardinal;
begin
if not OpenProcessToken( GetCurrentProcess (),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, h_Token) then exit;
if not LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid) then exit;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
pvs := nil;
if not AdjustTokenPrivileges(h_Token, false, tp, 0, pvs, retval) then exit;
ExitWindowsEx(EWX_REBOOT,0);
end;
ale delphi czepia sie linijki: if not AdjustTokenPrivileges(h_Token, false, tp, 0, pvs, retval) then exit; - a konkretnie zmiennej pvs -
wyskakuje błąd :Types of actual and formal var parameters must be identical.
Próbowałam pozmieniać typy ale to nic nie dało.
Pozakomentowaniu tej linijki nie działa, a procedury Win32Check(ExitWindowsEx(EWX_REBOOT, 0)) tez nie dzialaja
Justyna
Przywileje użytkownika? Rozumiem, że to rodzina NT. No więc użyj funkcji:
function SetPrivilege: boolean;
var
tpPrev, tp: TTokenPrivileges;
hwnd: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hwnd);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar('SeShutdownPrivilege'), tp.Privileges[0].LUID) then
begin
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
dwRetLen := 0;
Result := AdjustTokenPrivileges(hwnd, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(hwnd);
Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
end;
U mnie działa, mam win2000 sp4, a jeśli chcesz restartować na win 9x, to najlepiej najpierw wykryj system, na jakim działa program:
procedure wylaczaj;
var
OS:TOsVersionInfo;
begin
OS.dwOSVersionInfoSize:=SizeOf(os);
GetVersionEx(os);
case os.dwMinorVersion of
10: {win98}Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
90: {winME}Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
0: {win2000}SetPrivilege;//wywołanie funkcji, którą podałem wcześniej
1: {winXP}WinExec('shutdown.exe -r -f -t 0', SW_HIDE);
end;
end;
(formatowanie kodu automatycznie jest usuwane przy dodawaniu posta, więc tyle będzie do zrobienia :) )
No i to na tyle :)
____________o^o____________ (to mój rower :) )
Wyjdź. Oni i tak cię znajdą.
dzięki wreszcie mi to działa:D
Justyna
cytat:kredzik napisał:
Ty Asdef nie bądź taki mądry. Po to są forum żeby przycisku Szukaj nie używać
Nie no... teraz mnie zatkało...
POGIĘŁO CIĘ??? (//nie wycinajcie tego, proszę. :>)
PO TO JEST PRZYCISK SZUKAJ, ŻEBY NA FORUM NIE POWTARZAŁY SIĘ CIŚGLE TE SAME TEMATY!!! Skoro na forum już raz udzielono odpowiedzi na dane pytanie, po jaką cholerę (//tego też nie wycinajcie, proszę ;) )zadawać je ponownie?!!! Rozumiem że ktoś nie obyty w korzystaniu z forów może napisać mimo wszystko nowy temat, ale żeby najeżdzać na osobę która uprzejmie informuje go o pomyłce??!! Człowieku, daj sobie siana, ok?
I zalecam Ci lekturę podstawowych zasad netetykiety, jeśli chodzi o szukanie informacji na forach, znajdziesz tam zapis o korzystaniu z archiwów i nieponawianiu pytań na które już raz udzielono odpowiedzi. Amen.
PS - tak, wiem - netetykieta mówi też o nieobrażaniu współforumowiczów i nienadużywaniu Capsa, ale nie mogłem się powstrzymać ^_^'
"Człowieka można zniszczyć ale nie pokonać"
Ducha nie można ani zniszczyć ani pokonać.
Ducha X - nawet nie pytaj.
;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Znalazłam polecenie :"Win32Check(ExitWindowsEx(EWX_REBOOT, 0));" ale jak uruchamiam program to wyskakuje błąd: klient nie ma wymaganych uprawnień
Justyna
http://www. ks-eksper...sp?T...=restart,delphi
http://www.ks-eksper...sp?T...=restart,delphi
Ps. przycisk szukaj się kłania to tak na przyszłość;)
Asdef
Ty Asdef nie bądź taki mądry. Po to są forum żeby przycisku Szukaj nie używać
Peace on earth, war on net...
Użyłam procedury:
procedure TForm1.Button1Click(Sender: TObject);
var h_Token : THandle;
tp : TTokenPrivileges;
pvs : PTokenPrivileges;
retval: Cardinal;
begin
if not OpenProcessToken( GetCurrentProcess (),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, h_Token) then exit;
if not LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid) then exit;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
pvs := nil;
if not AdjustTokenPrivileges(h_Token, false, tp, 0, pvs, retval) then exit;
ExitWindowsEx(EWX_REBOOT,0);
end;
ale delphi czepia sie linijki: if not AdjustTokenPrivileges(h_Token, false, tp, 0, pvs, retval) then exit; - a konkretnie zmiennej pvs -
wyskakuje błąd :Types of actual and formal var parameters must be identical.
Próbowałam pozmieniać typy ale to nic nie dało.
Pozakomentowaniu tej linijki nie działa, a procedury Win32Check(ExitWindowsEx(EWX_REBOOT, 0)) tez nie dzialaja
Justyna
Przywileje użytkownika? Rozumiem, że to rodzina NT. No więc użyj funkcji:
function SetPrivilege: boolean;
var
tpPrev, tp: TTokenPrivileges;
hwnd: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hwnd);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar('SeShutdownPrivilege'), tp.Privileges[0].LUID) then
begin
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
dwRetLen := 0;
Result := AdjustTokenPrivileges(hwnd, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(hwnd);
Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
end;
U mnie działa, mam win2000 sp4, a jeśli chcesz restartować na win 9x, to najlepiej najpierw wykryj system, na jakim działa program:
procedure wylaczaj;
var
OS:TOsVersionInfo;
begin
OS.dwOSVersionInfoSize:=SizeOf(os);
GetVersionEx(os);
case os.dwMinorVersion of
10: {win98}Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
90: {winME}Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
0: {win2000}SetPrivilege;//wywołanie funkcji, którą podałem wcześniej
1: {winXP}WinExec('shutdown.exe -r -f -t 0', SW_HIDE);
end;
end;
(formatowanie kodu automatycznie jest usuwane przy dodawaniu posta, więc tyle będzie do zrobienia :) )
No i to na tyle :)
____________o^o____________ (to mój rower :) )
Wyjdź. Oni i tak cię znajdą.
dzięki wreszcie mi to działa:D
Justyna
cytat:kredzik napisał:
Ty Asdef nie bądź taki mądry. Po to są forum żeby przycisku Szukaj nie używać
Nie no... teraz mnie zatkało...
POGIĘŁO CIĘ??? (//nie wycinajcie tego, proszę. :>)
PO TO JEST PRZYCISK SZUKAJ, ŻEBY NA FORUM NIE POWTARZAŁY SIĘ CIŚGLE TE SAME TEMATY!!! Skoro na forum już raz udzielono odpowiedzi na dane pytanie, po jaką cholerę (//tego też nie wycinajcie, proszę ;) )zadawać je ponownie?!!! Rozumiem że ktoś nie obyty w korzystaniu z forów może napisać mimo wszystko nowy temat, ale żeby najeżdzać na osobę która uprzejmie informuje go o pomyłce??!! Człowieku, daj sobie siana, ok?
I zalecam Ci lekturę podstawowych zasad netetykiety, jeśli chodzi o szukanie informacji na forach, znajdziesz tam zapis o korzystaniu z archiwów i nieponawianiu pytań na które już raz udzielono odpowiedzi. Amen.
PS - tak, wiem - netetykieta mówi też o nieobrażaniu współforumowiczów i nienadużywaniu Capsa, ale nie mogłem się powstrzymać ^_^'
"Człowieka można zniszczyć ale nie pokonać"
Ducha nie można ani zniszczyć ani pokonać.
Ducha X - nawet nie pytaj.
;)