![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Простой вопрос [D5, XP]
mr1Andersen © (2006-03-28 23:21:00)Простой вопрос, как перезагрузить комп, поставить на спящей и ждущий режимы, если команды:
ExitWindows(EW_RESTARTWINDOWS,0);
ExitWindows(EW_REBOOTSYSTEM,0);
ExitWindows(EW_EXITANDEXECAPP,0);
не дают результата.
mr1Andersen (2006-03-31 01:36:00) [1]Большое спасибо AbrosimovA.
AbrosimovA (2006-03-29 08:39:00) [2]
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
Вызов этой функции:
MyExitWindows(EWX_POWEROFF); //Выключить
MyExitWindows(EWX_REBOOT); //Перезагрузить
MyExitWindows(EWX_LOGOFF); //Сменить пользователя
Rial (2006-03-29 01:27:00) [3]Попробуй использовать "%SYSTEMROOT%\system32\shutdown.exe"
kami (2006-03-28 23:33:00) [4]Дают результат, если использовать их не в сервисе.
Только нужно получить права SeShutdownPrivilege