Перезагрузка

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

SergeWiz
Сообщения: 22
Зарегистрирован: 05 апр 2004, 06:50
Откуда: Челябинск
Контактная информация:

Используйте WinAPI функцию ExitWindows(). В качестве первого параметра ей передается: EW_RESTARTWINDOWS , EW_REBOOTSYSTEM или EW_EXITANDEXECAPP
Второй параметр используется для перезагрузки компьютера в режиме эмуляции MS DOS.
ICQ 166585446
sergewiz@mail.ru
SergeWiz
Сообщения: 22
Зарегистрирован: 05 апр 2004, 06:50
Откуда: Челябинск
Контактная информация:

Для Delphi вроде uses ShellAPI; , а потом вызываешь. Это WinAPI функция
ICQ 166585446
sergewiz@mail.ru
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

SergeWiz, всё же все Win API функции в модуле Windows размещены.
Даже самый дурацкий замысел можно воплотить мастерски
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

И что это так всех на перезагрузку потянуло... :) На этом форуме тема уже недавно обсуждалась. В Паскале тот второй способ должен сработать через inline. Что-то вроде:

Код: Выделить всё

inline($EA/$00/$00/$FF/$FF);
PS - Это все если под ДОС. Иначе - ExitWindowsEx().
delphi-coder
Сообщения: 12
Зарегистрирован: 04 мар 2004, 15:35
Откуда: Moscow, Russia

Вот код для выключение компьютера. Работает как на W9X, так и на NTях.

Код: Выделить всё

uses Windows, ShellApi;

var
  TokenHandle: Cardinal;
  RetLength: Cardinal;
  TP: TTokenPrivileges;

Procedure Shutdown();
begin
  ExitWindowsEx(EWX_POWEROFF, 0);
  OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle);
  if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', TP.Privileges[0].Luid) then begin
   TP.PrivilegeCount:=1;
   TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
   RetLength:=0;
    If AdjustTokenPrivileges(TokenHandle, FALSE, TP, 0, nil, RetLength) then begin
     If not SetProcessShutdownParameters($4FF,SHUTDOWN_NORETRY) then begin
      MessageBox(0, 'Shutdown Failed', nil, MB_OK or MB_ICONSTOP);
      end;
       ExitWindowsEx(EWX_POWEROFF, 0);
       end;
     end;
end;
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

delphi-coder, для перезагрузки флаг EWX_REBOOT. И зачем два раза вызывать ExitWindowsEx? И еще: SetProcessShutdownParameters в Win9x нет, так что там не сработает. Лучше проверять версию Виндов и для 9x вызывать сразу ExitWindowsEx без запроса привилегий. В остальном - все верно :)
Ответить