WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 01.02.06 17:24
Оценка:
Есть многооконное и многопоточное приложение. Опытным путем удалось выяснить, что сообщение WM_QUERYENDSESSION приходит раньше к окну 1, чем к окну 2. При возврате TRUE из оконной процедуры окна 1 сообщение WM_QUERYENDSESSION к окну 2 не приходит . Посылаю окну 2 сообщение о завершении работы с помощью Post/SendMessage (из обработчика WM_QUERYENDSESSION окна 1), приложение завершается корректно (при этом происходит довольно много действий, в т. ч. посылка собщений разным окнам, снятие хуков, обращение к вебсервису — все это по времени несколько сотен миллисекунд), но Log off/Shut Down не продолжается (останавливается). Явный вызов ExitWindowsEx возвращает не ноль, но выхода из системы не происходит.
Что может быть причиной остановки процесса выхода из системы? Влияет ли посылка собщений на это? Как все-таки заставить завершиться сессию?
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 02.02.06 13:47
Оценка:
Заметил, что некоторые приложения также останавливают процесс выхода из системы.
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 02.02.06 18:37
Оценка:
"Перекопав" весь РСДН, нашел подобные задачи, но не нашел на них ответа.
Вопрос остается открытым: Почему после обработки WM_ENDSESSION и возврате 0 система перестает выгружатся?
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: ekamaloff Великобритания  
Дата: 03.02.06 05:42
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>"Перекопав" весь РСДН, нашел подобные задачи, но не нашел на них ответа.

R>Вопрос остается открытым: Почему после обработки WM_ENDSESSION и возврате 0 система перестает выгружатся?

Сначала вопрос стоял о WM_QUERYENDSESSION Если из WM_QUERYENDSESSION возвращается 0, нет ничего удивительного.
Возвращаемое из WM_ENDSESSION значение на процесс выгрузки не влияет.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 03.02.06 09:49
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Rosigma, Вы писали:


R>>"Перекопав" весь РСДН, нашел подобные задачи, но не нашел на них ответа.

R>>Вопрос остается открытым: Почему после обработки WM_ENDSESSION и возврате 0 система перестает выгружатся?

E>Сначала вопрос стоял о WM_QUERYENDSESSION Если из WM_QUERYENDSESSION возвращается 0, нет ничего удивительного.

E>Возвращаемое из WM_ENDSESSION значение на процесс выгрузки не влияет.

Обработчик WM_QUERYENDSESSION возвращает TRUE.

WM_ENDSESSION:
If an application processes this message, it should return zero.

Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: Pavel Dvorkin Россия  
Дата: 03.02.06 10:49
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Есть многооконное и многопоточное приложение. Опытным путем удалось выяснить, что сообщение WM_QUERYENDSESSION приходит раньше к окну 1, чем к окну 2.


Они оба не имеют родителя ?

>При возврате TRUE из оконной процедуры окна 1 сообщение WM_QUERYENDSESSION к окну 2 не приходит . Посылаю окну 2 сообщение о завершении работы с помощью Post/SendMessage (из обработчика WM_QUERYENDSESSION окна 1)


1. Так делать не хорошо
2. Какое именно сообщение посылаешь ?
With best regards
Pavel Dvorkin
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 03.02.06 11:05
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Rosigma, Вы писали:


PD>Они оба не имеют родителя ?


Для обоих окон спай показывает:
Parent window: None
Owner window: None

PD>1. Так делать не хорошо

PD>2. Какое именно сообщение посылаешь ?

User defined:
WM_APP + 9
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: Hacker_Delphi Россия  
Дата: 03.02.06 12:21
Оценка:
Здравствуйте, Rosigma, Вы писали:

а ты не закрывайся по WM_QUERYENDSESSION, закрывайся по WM_ENDSESSION
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 03.02.06 12:28
Оценка:
Сначала следует заметить, что юзаю Windows XP.
Ниже лог сообщений к окнам IM (создается при загрузке программы), QD и P (создаются в процессе работы). Первый столбец — процесс, второй — поток, третий — время.
Объяснения действий и состояний:
1. Все остальные приложение закрыты.
2. Выбираю Log Off.
3. WM_QUERYENDSESSION приходит окнам QD (видимое) и P (скрытое на момент завершения сесии), но не приходит окну IM!
4. 5 секунд система "думает": окна продолжают получать сообщения.
5. Появляется окно "Программа не отвечает. Завершить сейчас?" и висит 30 секунд. При этом окна не получают сообщений.
6. Появляется окно "Завершить сейчас? / Отмена": окна продолжают получать сообщения.
7. Жму "Отмена".
8. Приходит WM_ENDSESSION всем окнам, в обработчике WM_ENDSESSION для IM окна программа завершается.

Следовательно, возникли новые вопросы:
1. Как "избавиться" от появления окна "Программа не отвечает. Завершить сейчас?"? Почему программа "не отвечает"?
2. Почему WM_QUERYENDSESSION не приходит окну IM?
3. Почему при "отмене" посылается WM_ENDSESSION?

Жду ответов/советов.

0x0b60:0x089c:14:06:06.454: INFO: QD: 0x11 (WM_QUERYENDSESSION) // возврат TRUE
0x0b60:0x089c:14:06:06.454: INFO: P: 0x11 (WM_QUERYENDSESSION) // возврат TRUE
0x0b60:0x089c:14:06:06.454: INFO: QD: 0x1c
0x0b60:0x089c:14:06:06.454: INFO: P: 0x1c
0x0b60:0x089c:14:06:06.454: INFO: IM: 0x1c
0x0b60:0x089c:14:06:06.454: INFO: QD: 0x20
0x0b60:0x089c:14:06:06.454: INFO: QD: 0x1c
0x0b60:0x089c:14:06:06.469: INFO: P: 0x1c
0x0b60:0x089c:14:06:06.469: INFO: IM: 0x1c
0x0b60:0x089c:14:06:06.469: INFO: QD: 0x20
0x0b60:0x089c:14:06:06.485: INFO: QD: 0x111
0x0b60:0x089c:14:06:06.485: INFO: QD: 0x111
0x0b60:0x089c:14:06:06.485: INFO: QD: 0x111
0x0b60:0x089c:14:06:06.485: INFO: QD: 0x135
0x0b60:0x089c:14:06:06.485: INFO: QD: 0x2b
0x0b60:0x089c:14:06:11.454: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.423: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.423: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.439: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.439: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.454: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.470: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.470: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.470: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.501: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.501: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.517: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.517: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.533: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.533: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.548: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.548: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.548: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.548: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.548: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.564: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.564: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.564: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.579: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.595: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.611: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.611: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.611: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.611: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.611: INFO: QD: 0x200
0x0b60:0x089c:14:06:42.626: INFO: QD: 0x84
0x0b60:0x089c:14:06:42.626: INFO: QD: 0x20
0x0b60:0x089c:14:06:42.626: INFO: QD: 0x200
0x0b60:0x089c:14:06:45.767: INFO: QD: 0x84
0x0b60:0x089c:14:06:45.767: INFO: QD: 0x20
0x0b60:0x089c:14:06:45.767: INFO: QD: 0x200
0x0b60:0x089c:14:06:47.408: INFO: QD: 0x88
0x0b60:0x089c:14:06:47.408: INFO: QD: 0x85
0x0b60:0x089c:14:06:47.423: INFO: QD: 0x14
0x0b60:0x089c:14:06:47.423: INFO: QD: 0x136
0x0b60:0x089c:14:06:47.423: INFO: Set background color
0x0b60:0x089c:14:06:47.423: INFO: QD: 0x88
0x0b60:0x089c:14:06:47.423: INFO: QD: 0xf
0x0b60:0x089c:14:06:47.423: INFO: QD: 0x111
0x0b60:0x089c:14:06:47.439: INFO: QD: 0x111
0x0b60:0x089c:14:06:47.439: INFO: QD: 0x111
0x0b60:0x089c:14:06:47.439: INFO: QD: 0x135
0x0b60:0x089c:14:06:47.439: INFO: QD: 0x2b
0x0b60:0x089c:14:06:48.595: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.611: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.626: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.626: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.642: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.642: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.658: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.673: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.689: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.861: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.876: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.876: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.876: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.876: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.876: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.892: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.908: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.923: INFO: QD: 0x200
0x0b60:0x089c:14:06:48.923: INFO: QD: 0x84
0x0b60:0x089c:14:06:48.923: INFO: QD: 0x20
0x0b60:0x089c:14:06:48.923: INFO: QD: 0x200
0x0b60:0x089c:14:06:51.205: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.673: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.673: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.689: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.689: INFO: QD: 0x4e
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x4e
0x0b60:0x089c:14:06:52.705: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.720: INFO: QD: 0x4e
0x0b60:0x089c:14:06:52.720: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.736: INFO: QD: 0x4e
0x0b60:0x089c:14:06:52.736: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.751: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.751: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.751: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.751: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.751: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.767: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.783: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.783: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.783: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.783: INFO: QD: 0x4e
0x0b60:0x089c:14:06:52.798: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.798: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.798: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.798: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x84
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x200
0x0b60:0x089c:14:06:52.814: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.830: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.861: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.861: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.876: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.892: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.923: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.923: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.939: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.955: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.970: INFO: QD: 0x20
0x0b60:0x089c:14:06:52.986: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.001: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.033: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.033: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.048: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.064: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.080: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.095: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.111: INFO: QD: 0x84
0x0b60:0x089c:14:06:53.111: INFO: QD: 0x20
0x0b60:0x089c:14:06:53.111: INFO: QD: 0xa0
0x0b60:0x089c:14:06:57.830: INFO: QD: 0x88
0x0b60:0x089c:14:06:57.861: INFO: QD: 0x85
0x0b60:0x089c:14:06:57.861: INFO: QD: 0x14
0x0b60:0x089c:14:06:57.861: INFO: QD: 0x136
0x0b60:0x089c:14:06:57.861: INFO: Set background color
0x0b60:0x089c:14:06:57.877: INFO: QD: 0x16 (WM_ENDSESSION)
0x0b60:0x089c:14:06:57.877: INFO: P: 0x16 (WM_ENDSESSION)
0x0b60:0x089c:14:06:57.877: INFO: IM: 0x16 (WM_ENDSESSION)

Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 03.02.06 13:23
Оценка:
На 2000 Server картина другая: никаких диалогов не показывает, но все равно выход останавливается...

0x0520:0x0354:16:20:23.585: INFO: QD: 0x11 (WM_QUERYENDSESSION)
0x0520:0x0354:16:20:23.585: INFO: P: 0x11 (WM_QUERYENDSESSION)
0x0520:0x0354:16:20:23.615: INFO: QD: 0x16 (WM_ENDSESSION)
0x0520:0x0354:16:20:23.635: INFO: P: 0x16 (WM_ENDSESSION)
0x0520:0x0354:16:20:23.635: INFO: IM: 0x16 (WM_ENDSESSION)

Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re: WM_QUERYENDSESSION & Post/SendMessage???
От: SomeFellow  
Дата: 03.02.06 22:57
Оценка: 3 (1)
Здравствуйте, Rosigma, Вы писали:

R>Как все-таки заставить завершиться сессию?


Можно завершить сеанс принудительно (никакие диалоги появляться не будут), вызвав ExitWindowsEx с установленным флагом EWX_FORCE в параметре uFlags (в Windows 9X до принудительного отключения пользователя необходимо завершить процесс "explorer.exe" и лишь затем вызвать ExitWindowsEx с установленными флагами EWX_LOGOFF и EWX_FORCE) — система завершит все процессы безоговорочно, не посылая им WM_QUERYENDSESSION и WM_ENDSESSION. Но это, естественно, приведет к потере рабочих данных.
Как вариант, можно вначале попробовать "договориться по-хорошему" с приложениями, вызвав ExitWindows, если же она вернет FALSE — тогда принудительно, как описано выше.
Кроме того, если необходимо выключить компьютер или перезагрузить систему, в ОС Windows NT и выше перед вызовом ExitWindowsEx нужно попробовать получить привилегию SE_SHUTDOWN_NAME, которая из-за ограничений групповой политики может быть недоступна для учетной записи, от имени которой запущено приложение: тогда будет возможно только завершение текущего сеанса пользователя.

R>Что может быть причиной остановки процесса выхода из системы?

Любое приложение может вернуть 0 из обработчика сообщения WM_QUERYENDSESSION — на этом процесс завершения сеанса прекращается. Еще, "кривой" (или злонамеренный ) обработчик сообщения WM_ENDSESSION может "тянуть" с возвратом управления — это не прекращает разлогинирование (ужас, чего написал!), но приостанавливает его.
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: SomeFellow  
Дата: 04.02.06 01:38
Оценка:
Упс!
Неправильно понял — думал чьё-то чужое приложение не даёт выйти из системы.
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: SomeFellow  
Дата: 04.02.06 02:02
Оценка: 1 (1)
Здравствуйте, Rosigma, Вы писали:

R>4. 5 секунд система "думает": окна продолжают получать сообщения.


Ага, система считает, что поток "висит", если он не отвечает больше 5 с (например, не возвращает результат из оконной процедуры)

R>Следовательно, возникли новые вопросы:

R>1. Как "избавиться" от появления окна "Программа не отвечает. Завершить сейчас?"? Почему программа "не отвечает"?

В запутанных случаях я отслеживал прохождение сообщений, регистрируя нужные мне в оконных процедурах — несколько раз ещё и в цикле выборки — и сбрасывал лог в файл (у меня была масса проблем с обработкой сообщений в приложениях на основе WTL, а Spy++ постоянно вис (и вешал систему) при трассировке WTL-приложений).

R>Есть многооконное и многопоточное приложение.


Оконные процедуры обращаются к ф-циям других потоков? Я верно понял: сообщения для QD, P и IM обрабатываются в одном потоке? Сколько очередей сообщений имеет этот поток? Другие потоки также имеют свои очереди сообщений? Или у них есть оконные процедуры, а сообщения выбираются из очереди(ей), принадлежащей другому потоку?
Re[2]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 04.02.06 13:42
Оценка:
Здравствуйте, SomeFellow, Вы писали:

SF>Здравствуйте, Rosigma, Вы писали:


R>>Как все-таки заставить завершиться сессию?


SF>Можно завершить сеанс принудительно (никакие диалоги появляться не будут), вызвав ExitWindowsEx с установленным флагом EWX_FORCE в параметре uFlags...

Как быть в случае не завершения, а перезагрузки (Restart)?! По параметрам WM_QUERYENDSESSION можно определить Log Off и Shut Down.
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re[3]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 04.02.06 13:49
Оценка:
Здравствуйте, SomeFellow, Вы писали:

SF>Здравствуйте, Rosigma, Вы писали:


R>>Следовательно, возникли новые вопросы:

R>>1. Как "избавиться" от появления окна "Программа не отвечает. Завершить сейчас?"? Почему программа "не отвечает"?

SF>В запутанных случаях я отслеживал прохождение сообщений, регистрируя нужные мне в оконных процедурах — несколько раз ещё и в цикле выборки — и сбрасывал лог в файл (у меня была масса проблем с обработкой сообщений в приложениях на основе WTL, а Spy++ постоянно вис (и вешал систему) при трассировке WTL-приложений).


Это как раз мой случай — WTL и зависание Spy++!
Как раз логирование и просветило, что до некорых окон WM_ENDSESSION не доходит.

R>>Есть многооконное и многопоточное приложение.


SF>Оконные процедуры обращаются к ф-циям других потоков?

Да.
SF>Я верно понял: сообщения для QD, P и IM обрабатываются в одном потоке?
Да.
SF>Сколько очередей сообщений имеет этот поток?
Больше 10.
SF>Другие потоки также имеют свои очереди сообщений? Или у них есть оконные процедуры, а сообщения выбираются из очереди(ей), принадлежащей другому потоку?
У других потоков окон и оконных процедур нету.
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re[3]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 04.02.06 16:29
Оценка:
И еще:
1. Удалось все-таки решить проблему с выходом из системы без использования ExitWindows(Ex)?
2. Потребовалось при этом отказаться от WTL?
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
Re[3]: WM_QUERYENDSESSION & Post/SendMessage???
От: Rosigma Украина http://rosigma.com/
Дата: 06.02.06 13:46
Оценка:
Здравствуйте, Rosigma, Вы писали:

R>Как быть в случае не завершения, а перезагрузки (Restart)?! По параметрам WM_QUERYENDSESSION можно определить Log Off и Shut Down.


Как "распознать" "рестарт"?
Roman Yakhymets, http://rosigma.com/, All inside you, ICQ #214741007
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.