Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 12:29   #1
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
Радость Перехват завершения Windows

Всем привет! У меня вопрос: как из работающей программы, написанной на Delphi 7, отследить попытку завершения работы Windows? Планируется прога, работающая в фоновом режиме, которая при попытке завершить работу ОС блокировала бы эту попытку, а также запускала свои действия, например, выводила бы на рабочий стол напоминание "ВЫКЛЮЧИ СВЕТ!" и т.п.
Т.е. сигналом к началу опред. действий должна быть попытка завершения работы ОС.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 24.02.2011, 12:40   #2
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

отлавливай сообщение windows WM_QueryEndSession
а вообще то, это обсуждалось много раз...поищи по форуму
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 28.02.2011, 14:53   #3
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
Радость Перехват завершения Windows

Спасибо, MaxNik2009, отловил и обработал WM_QueryEndSession.
Кстати, а в какой последовательности Windows рассылает это сообщение (какая программа первая и т. д.)? Можно ли сделать так, чтобы программа, в которой я ловлю WM_QueryEndSession, получала его первой? Просто некоторые другие программы закрываются.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 28.02.2011, 15:23   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Можно ли сделать так, чтобы программа, в которой я ловлю WM_QueryEndSession, получала его первой?

Цитата:
The customer didn't even have to run through the thought experiment What if two programs did this?; they got to run it in real life! And the result was as predicted: The two programs fight with each other to be the one that is on top of the other. Nobody wins; everybody loses, especially the user.
http://blogs.msdn.com/b/oldnewthing/.../10096329.aspx
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 28.02.2011, 16:01   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Можно ли сделать так, чтобы программа, в которой я ловлю WM_QueryEndSession, получала его первой? Просто некоторые другие программы закрываются.
Попробуйте хук на сообщения с параметром WH_GETMESSAGE.
По описанию, в этом случае он будет отлавливать сообщение уже при постановке его в очередь на обслуживание.
А процедура GetMsgProc() может иметь в качестве параметра PM_REMOVE, позволяющий удалить это сообщение из очереди.
Кажется, так...
asmodey1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват информации о тэгах проигрываемого файла из Windows Media Player DM_bite Мультимедиа в Delphi 3 14.10.2009 10:27
Перехват ошибок от Windows DRUNE Софт 2 09.04.2009 13:24
Перехват завершения работы ОС vynt Win Api 7 19.05.2008 08:59
Перехват системных вызовов Windows Irat Помощь студентам 1 04.02.2008 16:30
перехват изменения состояния Windows Shuraken Win Api 9 13.09.2007 08:03