Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WinAPI как програмно выключить питание компьютера? [D7, WinXP]


Столков Иван ©   (2005-04-19 07:11:00) 

Подскажите пожалуйста, как правильно используется програмная функция для отключения питания компьютера. Пробовал :
ExitWindowsEX (EWX_POWEROFF or EWX_FORCE,0);, но вместо выключения происходит простая перезагрузка windows.


VNavigator   (2005-04-19 09:22:00) [1]

Выдрано из KOL&MCK:

function WindowsShutdown( const Machine : String; Force, Reboot : Boolean ) : Boolean;
var
 hToken: THandle;
 tkp, tkp_prev: TTokenPrivileges;
 dwRetLen :DWORD;
 Flags: Integer;
begin
 Result := False;
 if Integer( GetVersion ) < 0 then // Windows95/98/Me
 begin
   if Machine '' then Exit;
   Flags := EWX_SHUTDOWN;
   if Reboot then
     Flags := Flags or EWX_REBOOT;
   if Force then
     Flags := Flags or EWX_FORCE;
   Result := ExitWindowsEx( Flags, 0 );
   Exit;
 end;

 OpenProcessToken(GetCurrentProcess(),
                  TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
                  hToken);

 if not LookupPrivilegeValue(PChar(Machine), 'SeShutdownPrivilege',
                             tkp.Privileges[0].Luid) then Exit;
 tkp_prev:=tkp;
 tkp.PrivilegeCount:=1;
 tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
 AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(tkp), tkp_prev,
dwRetLen);

 if not LookupPrivilegeValue(PChar(Machine),
                             'SeRemoteShutdownPrivilege',
                             tkp.Privileges[0].Luid)
    then
        Exit;

 tkp.PrivilegeCount:=1;
 tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
 AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(tkp), tkp_prev,
dwRetLen);

 Result := InitiateSystemShutdown(PChar(Machine),nil, 0, Force, Reboot);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо