MrGalaxy
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору BrdGuest RomanTim Спасибо, господа! Я написал так: Код: var Form1: TForm1; tokenhandle: THandle; tp: TTokenPrivileges; X: cardinal; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS, tokenhandle) then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid) then begin tp.PrivilegeCount:=1; tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; If AdjustTokenPrivileges(TokenHandle, false, tp, 0, nil, X) then ExitWindowsEx(EWX_SHUTDOWN,0) end end; end. | Проверил, работает в т.ч. и на Висте-64. RomanTim, я Вас чуть покритикую за "+EWX_FORCE". Дело в том, что такая конструкция должна выключать ЭВМ, не завершая процессы, а делая им секир-башка без всякого сохранения пользовательских данных. Для этого не надо и привилегии повышать, так выключается, я проверял. А что мне понравилось - так это то, что Вы обошлись без создания промежуточной переменной при вызове AdjustTokenPrivileges. Добавлено: Может, это уже обсуждалось, но какой Делфи чётко работает с-под Висты-64? Я на работе попробовал поставить 6-й, ему что-то не понравилось, ругнулся. Дома ставить не рискую. 2006-й будет работать? Я видел в продаже у пиратов. |