Главная страница
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.013 c
2-1235055783
Denis__
2009-02-19 18:03
2009.04.05
Сообщение, приходящее при клике левой кнопкой мыши


2-1234571534
Артёмка
2009-02-14 03:32
2009.04.05
Динамические меню.


9-1177670225
ElectriC
2007-04-27 14:37
2009.04.05
Столкновение с mesh-объектом


1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


11-1199030958
Efir
2007-12-30 19:09
2009.04.05
Библиотека KOLATL