C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 7.4.10 Hook-точки WH_MSGFILTER и WH_SYSMSGFILTER / Hook / Win32 API

7.4.10 Hook-точки WH_MSGFILTER и WH_SYSMSGFILTER

Hook-точки WH_MSGFILTER и WH_SYSMSGFILTER дают возможность Вам контролировать сообщения, которые будут обработаны меню, линейкой прокрутки, окном сообщений или диалоговым окном, и обнаруживать, когда другое окно собирается стать активным в результате нажима пользователем комбинации клавиш ALT+TAB или ALT+ESC. Hook-точка WH_MSGFILTER может контролировать только сообщения переданные в меню, линейку прокрутки, окну сообщений или блоку диалога, созданному прикладной программой, которая установила подключаемую процедуру. Hook-точка WH_SYSMSGFILTER контролирует такие сообщения для всех прикладных программ.

Hook-точки WH_MSGFILTER и WH_SYSMSGFILTER дают возможность Вам выполнить фильтрацию сообщений в ходе модальных циклов, которые является эквивалентными фильтрации производимой в основном цикле сообщений. Например, прикладная программа часто проверяет новое сообщение в основном цикле между временем поиска своего сообщения в очереди и временем, когда она посылает сообщение, выполнив специальную обработку, как это требуется. Однако в ходе модального цикла, система извлекает и распределяет сообщения без предоставления прикладной программе возможности фильтровать сообщения в ее главном цикле сообщений. Если прикладная программа устанавливает подключаемую процедуру WH_MSGFILTER или WH_SYSMSGFILTER, система вызывает процедуру в ходе модального цикла.

Прикладная программа может вызывать hook-точку WH_MSGFILTER непосредственно, вызывая функцию CallMsgFilter. Используя эту функцию, прикладная программа может использовать тот же самый код, чтобы фильтровать сообщения в ходе модальных циклов, поскольку он используется в основном цикле сообщений. Поступив так, вы инкапсулируйте операции фильтрации в подключаемой процедуре WH_MSGFILTER и вызываете CallMsgFilter между обращениями к функциям GetMessage и DispatchMessage.

while (GetMessage(&msg, (HWND) NULL, 0, 0))
{
	if (!CallMsgFilter(&qmsg, 0))
		DispatchMessage(&qmsg);
}

Последний параметр CallMsgFilter просто передают в подключаемую процедуру; Вы можете ввести любое значение. Подключаемая процедура, определив константу типа MSGF_MAINLOOP, может использовать это значение, чтобы определить, кем процедура была вызвана.

Для получения дополнительной информации, см. статью о функции MessageProc и SysMsgProc.


| |
Автор Владимир Соковиков.
[AD]