![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перехват WM_QUERYENDSESSION [D7, XP]
aleko © (2007-12-03 19:45:00)Доброго времени суток, уважаемые Мастера. Подскажите - при перехвате сообщения WM_QUERYENDSESSION пытаюсь запустить cmd.exe - пишет не могу инициализировать приложение... :( Можно ли как-то его побороть?
aleko (2007-12-04 18:39:00) [1]..все понятно, спасибо за помощь.. :)
Skyle (2007-12-04 07:45:00) [2]> homm © (04.12.07 07:19) [4]
Уточнение > Skyle © (04.12.07 07:12) [3]
Для каждого процесса, владеющего окном верхнего уровня, Csrss посылает сообщения WM_QUERYENDSESSION всем его потокам с циклом выборки Windows-сообщений. Если поток возвращает TRUE, процесс завершения работы системы продолжается. Тогда Csrss посылает потоку сообщение WM_ENDSESSION с требованием завершить свою работу. Csrss ждёт завершения потока в течение времени, указанного в NKCU\Control Panel\Desktop\NungAppTimeout (по умолчанию - 5000 мс). Если в течение указанного времени поток не завершается, Csrss открывает диалоговое окно ....(вывод этого окна можно отключить, присвоив параметру NKCU\Control Panel\Desktop\AutoEndTasks значение, равное 1). Диалоговое окно уведомляет пользователя о том, что корректное завершение данной программы невозможно, и предлагает принудительно завершить процесс или отменить завершение работы системы (таймаут для этого диалогового окна не предусмотрен, а значит, на этом этапе запрос на завершение может ждать бесконечно долго).
© Соломон, Руссинович, "Внутреннее устройство Windows"
homm (2007-12-04 07:19:00) [3]> [3] Skyle © (04.12.07 07:12)
> то через определённое время (по дефолту 5 секунд)
ну конечно. 20 по дефолту для сервисов. А приложения никто автоматом грохать не будет, пользователю выведится сообщение сначала с обратным отсчетом, потом просто с предложением закрыть.
Skyle (2007-12-04 07:12:00) [4]it SHOULD return false.
Если ты в своей программе просто тормозишь, то через определённое время (по дефолту 5 секунд) твой процесс просто сдохнет и всё.
А если ты вернёшь FALSE, то завершение работы прекратиться.
aleko (2007-12-03 19:58:00) [5]Я впихнул выброс сообщения ShowMessage - выгрузка останавливается, так как работа моей программы не завершается. А потом запуск cmd. Но все равно - "не могу инициализировать"........ или нужно конкретно вернуть FALSE?
clickmaker (2007-12-03 19:47:00) [6]Return Values
If an application can terminate conveniently, it should return TRUE; otherwise, it should return FALSE.
Remarks
By default, the DefWindowProc function returns TRUE for this message
(c) MSDN
Если вернешь true или отдашь DefWindowProc, то винда продолжит выгружаться, отсюда и "не могу инициализировать приложение"