Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Программная перезагрузка/выключение   Найти похожие ветки 

 
Graf   (2004-03-10 06:26) [0]

Привет всем!
Народ, объясните, как можно выполнить программную перезагрузку или выключение под WinXP. Почитал, что есть какие-то привилегии приложений и пр. но ничего конкретного в API нету. Подскажите, желательно с примерами.


 
Eagle-XK ©   (2004-03-10 10:39) [1]

Попробуй так:

if not ExitWindows(EX_RebootSystem, 0) then {ERROR};
ExitWindows(EX_RestartWindows, 0)

Аналогично и:
ExitWindowsEx(EWX_Logoff, 1)
ExitWindowsEx(EWX_Shutdown, 1)
ExitWindowsEx(EWX_Reboot, 1)
ExitWindowsEx(EWX_Force, 1)
ExitWindowsEx(EWX_Poweroff, 1)
ExitWindowsEx(EWX_Forceifhung, 1)


 
Graf   (2004-03-10 11:15) [2]

Во-во, я уже это пробовал. Только АПИ говорит, что надо установить токены привилегий, а где - фиг его знаить?


 
Игорь Шевченко ©   (2004-03-10 11:26) [3]


> Только АПИ говорит, что надо установить токены привилегий,
> а где - фиг его знаить?


FAQ


 
Александр1 ©   (2004-03-10 18:38) [4]

Перезагрузка!!!!!!!! WinNT
procedure reboot2;
var hToken : THandle;
   tkp : _TOKEN_PRIVILEGES;
   DUMMY : PTokenPrivileges;
   DummyRL : Cardinal;
begin
 DUMMY:=nil;
 if not OpenProcessToken(
   GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
   hToken
 )
 then raise TShutdownEx.Create("OpenProcessToken failed");

 if (not LookupPrivilegeValue(nil, "SeShutdownPrivilege" , tkp.Privileges[0].Luid))
   then raise TShutdownEx.Create("LookupPrivilegeValue failed");

 tkp.PrivilegeCount := 1;
 tkp.Privileges[0].Attributes := $0002; //SE_PRIVILEGE_ENABLED = $00002

 AdjustTokenPrivileges(hToken, FALSE, tkp, 0, Dummy, DummyRL);

 if (GetLastError() <> ERROR_SUCCESS) then
   raise TShutdownEx.Create("AdjustTokenPrivileges failed");

 if (not ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0)) then
   raise TShutdownEx.Create("ExitWindowsEx failed");
end;


 
Александр1 ©   (2004-03-10 18:39) [5]

Выключение!!!!!!
procedure RebootSystem;
var
 handle_: THandle;
 n: DWORD;
 luid: TLargeInteger;
 priv: TOKEN_PRIVILEGES;
 ver: TOSVERSIONINFO;
begin
 ver.dwOSVersionInfoSize := Sizeof(ver);
 GetVersionEx(ver);
 if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
 begin
   if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
     if LookupPrivilegeValue(nil, "SeShutdownPrivilege", luid) then
     begin
       priv.PrivilegeCount := 1;
       priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       priv.Privileges[0].Luid := luid;
       AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
     end
     else
       writeln("Ошибка")
   else
     writeln("Ошибка ");
 end
 else
   writeln("Ошибка ");
 if not ExitWindowsEx(EWX_POWEROFF,1) then
   writeln("Ошибка");
end;


 
Александр1 ©   (2004-03-10 18:40) [6]

К стати примеры по этому вопросу есть на этом сайте!!!


 
Graf   (2004-03-11 05:58) [7]

Спасибо!!!!!!!


 
Александр1 ©   (2004-03-11 10:56) [8]

Graf - Пожалуйста!



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.068 c
1-1081876992
andrysha
2004-04-13 21:23
2004.05.02
подкажите как из String конвертить в Boolean


3-1081165474
wild_arg
2004-04-05 15:44
2004.05.02
Время выполнения процедуры


1-1081871661
}|{yk
2004-04-13 19:54
2004.05.02
Drag-n-drop - изменение выделенного объекта при переносе


14-1081765401
Dmitriy O.
2004-04-12 14:23
2004.05.02
Кто имел опыт по размещению рекламы на своем сайте ?


1-1082086926
cvg
2004-04-16 07:42
2004.05.02
Какие есть цвета?