Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
Ната   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.046 c
3-1107249932
Olka
2005-02-01 12:25
2005.03.06
на запрос в Access появлятеся ошибка Переполнение


1-1108523985
Wowa-K
2005-02-16 06:19
2005.03.06
Быстрая вставка данных в Word


14-1108508807
GanibalLector
2005-02-16 02:06
2005.03.06
Обзор решений для магазина супермаркета


14-1108366803
Sapsi
2005-02-14 10:40
2005.03.06
Уровень общей культуры в России и других странах


1-1108804782
Object
2005-02-19 12:19
2005.03.06
Уважаемые мастера, помогите разобраться с TList !!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский