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

Вниз

Банально: Перезагрузка 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
1-12371
Ivolg
2004-02-25 11:42
2004.03.05
Компоненты


1-12402
ИМХО
2004-01-23 14:00
2004.03.05
Знатокам связки Delphi + Word


1-12411
Budy
2004-02-22 22:11
2004.03.05
TMemo


14-12518
malkolinge
2004-02-12 16:06
2004.03.05
Возрадуйтесь !!!!!!!!!! Фаронов пишет новую книгу


1-12395
Andriy Tysh
2004-02-20 16:55
2004.03.05
JPEG.pas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский