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

Вниз

Подводные камни при автоматическом выключении компьютера   Найти похожие ветки 

 
Dr. Genius   (2009-02-10 19:25) [0]

Написал для своих личных нужд небольшую программу, которая автоматически выключает компьютер в указанное время. Вот ее основной код:

 function MyExitWindows(const RebootParam: Longword): Boolean;
 var
   TTokenHd: THandle;
   TTokenPvg: TTokenPrivileges;
   cbtpPrevious: DWORD;
   rTTokenPvg: TTokenPrivileges;
   pcbtpPreviousRequired: DWORD;
   tpResult: Boolean;
 const
   SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
 begin
     tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
       or TOKEN_QUERY, TTokenHd);
     if (tpResult) then
     begin
       tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME,
         TTokenPvg.Privileges[0].Luid);
       TTokenPvg.PrivilegeCount := 1;
       TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       cbtpPrevious := SizeOf(rTTokenPvg);
       pcbtpPreviousRequired := 0;
       if (tpResult) then
         Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg,
           cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired);
     end;
   Result := ExitWindowsEx(RebootParam, 0);
 end;


Вызов:

MyExitWindows(EWX_POWEROFF or EWX_FORCE or EWX_FORCEIFHUNG);

А теперь такой вопрос. В каких случаях Windows будет препятствовать моей программе самоличному завершению работы компьютера? Я лично знаю только один из таких случаев – наличие активного удаленного соединения (в этом случае Windows не завершает работу компьютера, т.к. выводит диалоговое окно с запросом «отключиться или нет?»).

Решение этой конкретной проблемы я нашел – я просто программно отключаю все обнаруженные в системе соединения. Но хотелось бы узнать, какие еще подводные камни такого рода могут встречаться при автоматическом выключении компьютера?


 
Anatoly Podgoretsky ©   (2009-02-10 19:30) [1]

> Dr. Genius  (10.02.2009 19:25:00)  [0]

Обсуждать случае нет смысла, поскольку здесь написана полная ерунда - MyExitWindows(EWX_POWEROFF or EWX_FORCE or EWX_FORCEIFHUNG);


 
Dr. Genius   (2009-02-10 19:32) [2]


> Обсуждать случае нет смысла, поскольку здесь написана полная
> ерунда


Почему вы так считаете. Код нормально работает.


 
Anatoly Podgoretsky ©   (2009-02-10 19:40) [3]

> Dr. Genius  (10.02.2009 19:32:02)  [2]

Работает ни и ладно, только ты почему то пришел на форум с проблемой.


 
Fonts   (2009-02-10 19:45) [4]

> Dr. Genius   (10.02.09 19:25)

Рискну предположить, что это не совсем ты написал эту функцию, у меня почему-то оказалась точно такая же, в таком же контексте (выключаю компьютер по времени, когда смотрю фильм и могу заснуть и даже понимает выключить после нуля часов). А я ее сам не писАл, а где-то скачал. Так вот в "первоисточнике":

MyExitWindows(EWX_POWEROFF or EWX_FORCE);


 
Dr. Genius   (2009-02-10 19:52) [5]


> Так вот в "первоисточнике":
>
> MyExitWindows(EWX_POWEROFF or EWX_FORCE);


Я знаю, что так в первоисточнике. А что, без EWX_FORCEIFHUNG будет правильнее?


 
Anatoly Podgoretsky ©   (2009-02-10 20:40) [6]

> Fonts  (10.02.2009 19:45:04)  [4]

Такой же дурдом и непонимание принципов работы Виндоус, вилимо ты всегда вырубаешь Виндоус, путем выдергивания шнура.


 
kami ©   (2009-02-10 20:41) [7]

Наоборот, правильнее будет без EWX_FORCE но с EWX_FORCEIFHUNG


 
Anatoly Podgoretsky ©   (2009-02-10 20:42) [8]

http://www.podgoretsky.com/ftp/Docs/Delphi/FAQ/ru.delphi.html#N161



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

Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
15-1233787788
Германн
2009-02-05 01:49
2009.04.05
Телефон, телефонный кабель и RJ разъём


15-1233422138
blackman
2009-01-31 20:15
2009.04.05
Отстал от жизни.


15-1233878286
pascal
2009-02-06 02:58
2009.04.05
Перестарьте заниматься ерундой!


2-1234372907
wq
2009-02-11 20:21
2009.04.05
Импорт процедур и функций


2-1234454755
Maacheba
2009-02-12 19:05
2009.04.05
Поиск "дырки" в записях





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