Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
1-1082287187
Андрей Сенченко
2004-04-18 15:19
2004.05.02
Поймать ответ ShellExecute в случае ошибки


1-1081931412
infom
2004-04-14 12:30
2004.05.02
Найти контрол


14-1081088912
Гаврила
2004-04-04 18:28
2004.05.02
Постоянная работа для программера в Москве


4-1078476980
Vik_mix
2004-03-05 11:56
2004.05.02
ScrollBar


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский