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

Вниз

Банально: Перезагрузка Windows   Найти похожие ветки 

 
Terrible   (2003-12-18 18:43) [0]

Казалось бы эоементарно, нашёл кучу примеров, но не работает :( Прилагаю процедуру, которую я применяю сейчас, может кто нибудь посмотреть что я делаю не так.
Проблема в том, что она работает через раз (система WinXP), иногда перезагружает, иногда нет, на разных компьютерах ведёт себя по разному. В общем что то в неё не так

Procedure RebootSystem;
var
ver: TOSVERSIONINFO;
ph:THandle;
tp,prevst:TTokenPrivileges;
rl:DWORD;
begin
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(Nil,"SeShutdownPrivilege",tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(ph,FALSE,tp,0,nil,rl);
InitiateSystemShutdown(nil,nil,0,true,true);
end
else begin
ExitWindowsEx(EWX_REBOOT, 0);
end;
end;


 
DVM ©   (2003-12-18 18:55) [1]

А почему бы для всех систем не вызывать ExitWindowsEx(EWX_REBOOT, 0), а не только для win9x


 
Cash ©   (2003-12-19 11:39) [2]

Хм.м.м.м.м. Terrible прогуляйся пониже(точнее ст 3-5), найдешь мой вопрос, там все дохотчево (комент. Вадим-а).


 
Terrible   (2003-12-19 12:13) [3]


> А почему бы для всех систем не вызывать ExitWindowsEx(EWX_REBOOT,
> 0), а не только для win9x

Потому что на Win2000/XP это не работает :/


 
Holy ©   (2003-12-19 16:02) [4]


> Потому что на Win2000/XP это не работает :/

Работает.

procedure ShutDownNT(hibernate:boolean);
const
A_Priv=Token_Query or Token_Adjust_Privileges;
S_Priv="SeShutdownPrivilege";
Size=sizeOf(TTokenPrivileges);
var
T, Buf:TTokenPrivileges; Token:THandle; Len:dword;
begin
if hibernate then
begin WinExec("rundll32.exe powrprof.dll,SetSuspendState",1); exit; end;
// Добавляем процессу приоритет на завершение работы
OpenProcessToken(GetCurrentProcess(), A_Priv, Token);
LookupPrivilegeValue(nil, S_Priv,T.Privileges[0].Luid);
T.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
T.PrivilegeCount := 1;
AdjustTokenPrivileges(Token, false, T, Size, Buf, Len);
// Завершаем работу
ExitWindowsEx(EWX_PowerOFF,0);
end;

Код из плагина для винампа. Им пользуюсь я и несколько моих знакомых. Платформа - W2K SP - любой.



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
1-12314
Nimble
2004-02-25 17:20
2004.03.05
Создание своих компонентов


1-12340
DDA
2004-02-21 23:04
2004.03.05
Help in CHM


1-12346
HELamer!
2004-02-21 20:13
2004.03.05
даёшь гиперлинку в текст


1-12442
Relaxxx
2004-02-23 11:33
2004.03.05
Вопрос о работе с датами!


1-12372
}|{yk
2004-02-24 20:01
2004.03.05
Опять компонент...