Как завершить сеанс работы или перезагрузить Windows Vista
Как завершить сеанс работы или перезагрузить Windows Vista
Как завершить сеанс работы или перезагрузить Windows Vista Всё нормально работает и на висте и на ХР. Выключение компа: var th, size: Cardinal; luid: Int64; tp: TOKEN_PRIVILEGES; ptp: PTokenPrivileges; begin if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, th) then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid := luid; ptp := nil; AdjustTokenPrivileges(th, false, tp, 0, ptp^, size); ExitWindowsEx(EWX_POWEROFF or ewx_force,0); end; А вот перезагрузка: var th, size: Cardinal; luid: Int64; tp: TOKEN_PRIVILEGES; ptp: PTokenPrivileges; begin if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, th) then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid := luid; ptp := nil; AdjustTokenPrivileges(th, false, tp, 0, ptp^, size); ExitWindowsEx(EWX_REBOOT or ewx_force,0); end; Только эти функции не будут спрашивать другие программы, чтобы они например сохранили данные. Агрессивный метод так сказать.