Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Как программно перегрузить компьютер?   Найти похожие ветки 

 
Ната   (2005-01-21 07:52) [0]

ПОдскажите, пожалуйста, как программно перегрузить компьютер?


 
Квэнди ©   (2005-01-21 09:04) [1]

а поискать в этом же форуме саавсем лень?


 
onyx ©   (2005-01-21 11:52) [2]

Вот готовое решение. А то здесь трудно найти, то что нужно.

function WinExit : boolean;
var ver : OSVERSIONINFO;

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;

BEGIN
 ver.dwOSVersionInfoSize:=SizeOf(ver);
 GetVersionEx(ver);
 if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
 begin
   if SetPrivilege("SeShutdownPrivilege", true) then
   begin
     Form1.Close;
     ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
   end
   else
   begin
     Form1.Close;
     MessageBox(Form1.Handle, "К сожалению перезагрузка не получилась!","info",MB_OK or MB_ICONWARNING or MB_SYSTEMMODAL);
   end;
 end
 else
 begin
   Form1.Close;
   ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
 end;
END;


 
VMcL ©   (2005-01-21 16:50) [3]

>Form1.Close;
>MessageBox(Form1.Handle...);

За такой код расстреливать надо.


 
Вариант ©   (2005-01-22 18:29) [4]

Такой способ не убивает процессы:
procedure reboot;
var
 hToken: THandle;
 tkp: _TOKEN_PRIVILEGES;
 DUMMY: PTokenPrivileges;
 DummyRL: Cardinal;
begin
 DUMMY := nil;
 if not OpenProcessToken(
   GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
   hToken
   ) then
   raise TShutdownEx.Create("OpenProcessToken failed");

 if (not LookupPrivilegeValue(nil, "SeShutdownPrivilege",
   tkp.Privileges[0].Luid)) then
   raise TShutdownEx.Create("LookupPrivilegeValue failed");

 tkp.PrivilegeCount := 1;
 tkp.Privileges[0].Attributes := $0002; //SE_PRIVILEGE_ENABLED = $00002

 AdjustTokenPrivileges(hToken, FALSE, tkp, 0, Dummy, DummyRL);

 if (GetLastError() <> ERROR_SUCCESS) then
   raise TShutdownEx.Create("AdjustTokenPrivileges failed");

 if (not ExitWindowsEx(EWX_REBOOT, 0)) then
   raise TShutdownEx.Create("ExitWindowsEx failed");
end;


 
Dextor   (2005-01-22 20:30) [5]

Проще полистать FAQ на этом сайте, там как раз все написанно !


 
grom   (2005-01-22 20:42) [6]

XP
...
procedure ...
var
 hToken: THandle;
 tkp: _TOKEN_PRIVILEGES;
 returnLength: Cardinal;
begin
// Windows.Beep(855,55);

   if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken)then
  begin
    LookupPrivilegeValue(nil,"SeShutdownPrivilege",tkp.Privileges[0].Luid);
    tkp.PrivilegeCount:=1;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    if AdjustTokenPrivileges(hToken,false,tkp,0,nil,returnLength)then ExitWindowsEx(EWX_SHUTDOWN or EWX_REBOOT,0);
  end;
end;


 
i-s-v ©   (2005-01-23 01:35) [7]

Полазь на http://delphiworld.narod.ru

---
The Death Will Come



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
4-1106388517
Goorus
2005-01-22 13:08
2005.03.06
Подсказка к CheckBox


14-1108152620
Virusa
2005-02-11 23:10
2005.03.06
KAV 5.xx


4-1106737779
ДИван
2005-01-26 14:09
2005.03.06
Как просмотреть запущенные процессы в win2k?


1-1108753570
Ji
2005-02-18 22:06
2005.03.06
Магнитные бури???


14-1108492975
Michael5
2005-02-15 21:42
2005.03.06
Как заменить родное событие компонента своим?