Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизWinAPI как програмно выключить питание компьютера? Найти похожие ветки
← →
Столков Иван (2005-04-19 07:11) [0]Подскажите пожалуйста, как правильно используется програмная функция для отключения питания компьютера. Пробовал :
ExitWindowsEX (EWX_POWEROFF or EWX_FORCE,0);, но вместо выключения происходит простая перезагрузка windows.
← →
VNavigator © (2005-04-19 09:22) [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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.018 c