Форум: "Система";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
ВнизВыключение компьютера Найти похожие ветки
← →
Zyv (2001-12-06 13:51) [4]Маленькое добавление к коду Searcher.
В функцию ExitWindowsEx под NT/2000 лучше не вставлять флаг EWX_FORCE, т.к. такое завершение оборвет все процессы на полуслове. Можно закрыть все корректно: ExitWindowsEx(EWX_SHUTDOWN Or EWX_POWEROFF, 0).
А вот под 9X, если не вставить EWX_FORCE, то получим на экран модальное окно с сообщением, что к компьютеру подключены пользователи и т.д., после чего "программное выключение компьютера" превращается в ручное.
Исходя из изложенного, я делаю так:
function SetPrivilege(PrivilegeName: string; Enable: boolean): Boolean;
var tpPrev, Tp : TTokenPrivileges;
Token : THandle;
dwRetLen : DWord;
begin
Result := False;
If Not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, Token) Then Exit;
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
...
If Win32Platform = VER_PLATFORM_WIN32_WINDOWS Then
Begin
ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN Or EWX_POWEROFF, 0);
End;
If Win32Platform = VER_PLATFORM_WIN32_NT Then
Begin
SetPrivilege("SeShutdownPrivilege", True);
ExitWindowsEx(EWX_SHUTDOWN Or EWX_POWEROFF, 0);
End;
...
end;
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.009 c