Главная страница
    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.007 c
14-12521
nv-vetal
2004-02-12 15:57
2004.03.05
Как вытянуть из dpk файлы pas програмно?


3-12295
Alexander Smith
2004-02-06 17:01
2004.03.05
DBGrid, скроллинг


1-12438
md
2004-02-23 12:20
2004.03.05
ListBox


1-12413
WondeRu
2004-02-24 16:18
2004.03.05
EOleException: Разрушительный сбой?


3-12236
uu
2004-02-08 10:59
2004.03.05
Как создать базу SQL запросом?





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