Форум: "Начинающим";
Текущий архив: 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.008 c