![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;