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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1233170938
XeON
2009-01-28 22:28
2009.04.05
Какой язык использовать?


2-1234282835
Dr. Genius
2009-02-10 19:20
2009.04.05
Непонятки с WM_TIMECHANGE


2-1234705966
bba
2009-02-15 16:52
2009.04.05
MS Office + CodeGear 2009


2-1234938715
dolmat
2009-02-18 09:31
2009.04.05
Как добавить в строку знак


15-1233473207
oleg_babenko
2009-02-01 10:26
2009.04.05
Как в Delphi 2006 сделать горячие клавиши как в Delphi6