Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Shutdown под XP |
Философия, технологии, алгоритмы! |
|
Опции темы |
20.03.2006, 20:03 | #1 |
Форумдец
Сообщений: 5,285
Регистрация: 07.06.2004
Не в сети |
Shutdown под XP
Как это сделать на Delphi?
Вот отрыл какой-то пример, но он делает только смену пользователя: procedure TForm1.TimerTimer(Sender: TObject); Function SetPrivilege(aPrivilegeName: String; aEnabled: 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(aPrivilegeName),TP. Privileges[0].LUID ) then Begin IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes:=0; dwRetLen:= 0; Result:=AdjustTokenPrivileges(Token,False,TP,SizeO f(TPPrev),TPPrev,dwRetLen); End; CloseHandle(Token); End; begin if TimeToStr(Time) = TimeEdit.Text then begin SetPrivilege('SeShutdownPrivilege',True); ExitWindows(EWX_SHUTDOWN or EWX_FORCE,0); end; end; |
20.03.2006, 21:31 | #2 |
Форумдец
Сообщений: 5,285
Регистрация: 07.06.2004
Не в сети |
Отвечу сам себе:
Function SetPrivilege(aPrivilegeName: String; aEnabled: 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(aPrivilegeName),TP. Privileges[0].LUID ) then Begin IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes:=0; dwRetLen:= 0; Result:=AdjustTokenPrivileges(Token,False,TP,SizeO f(TPPrev),TPPrev,dwRetLen); End; CloseHandle(Token); End; begin if TimeToStr(Time) = TimeEdit.Text then begin SetPrivilege('SeShutdownPrivilege',True); ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE,0); end; |