Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перехват сообщений

278
23 августа 2008 года
Alexander92
1.1K / / 04.08.2008
Народ, подскажите, плз, как корректно организовать перехват сообщения:

 
Код:
SendMessage(FindWindow('Progman', 'Program Manager'), WM_CLOSE, 0, 0)
12K
23 августа 2008 года
lifs
163 / / 06.09.2007
Поставить глобальный хук с параметром WH_GETMESSAGE. При выполнении процедуры хука проверять окну какого класса послано сообщения, если класс окна 'Progman' и сообщение WM_CLOSE, то заменить его на WM_NULL.
278
23 августа 2008 года
Alexander92
1.1K / / 04.08.2008
Я просто чуть-чуть запутался в параметрах процедуры хука. Объясните кто-нибудь толком, за что отвечает каждый из параметров Code, wParam и lParam (именно в случае WH_GETMESSAGE) или где это можно толково почитать.
P.S. Вы уверены, что речь идет о WH_GETMESSAGE, а не о WH_CALLWNDPROC?
12K
23 августа 2008 года
lifs
163 / / 06.09.2007
Да.
Code - если равно HC_ACTION, то следует обрабатывать, иначе пропустить
wParam - если равно PM_NOREMOVE, то сообщение не будет удалено из очереди сообщений, если PM_REMOVE - будет
lParam - указатель на структуру MSG
278
23 августа 2008 года
Alexander92
1.1K / / 04.08.2008
Ага... А какой параметр содержит тип передаваемого сообщения (в данном случае WM_CLOSE)? И, если вас не затруднит, подкиньте какой-нибудь простенький пример использвования WH_GETMESSAGE.
12K
23 августа 2008 года
lifs
163 / / 06.09.2007
lParam - указатель на структуру MSG
 
Код:
typedef struct {
    HWND hwnd;
    UINT message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD time;
    POINT pt;
} MSG, *PMSG;

hwnd - окно, которому послано сообщение
message - идентификатор сообщения, его как раз и нужно заменить на WM_NULL, если нужно, чтобы сообщение было проигнорировано
278
23 августа 2008 года
Alexander92
1.1K / / 04.08.2008
Понял, спасибо, буду разбираться...
278
23 августа 2008 года
Alexander92
1.1K / / 04.08.2008
Подскажите, что я делаю не так:
 
Код:
for (;;)
{
  GetMessage(messag,FindWindow("Progman","Program Manager"),0,0);
  messag.message = WM_NULL;
}
12K
23 августа 2008 года
lifs
163 / / 06.09.2007
Функция GetMessage возвращает сообщение из очереди текущего потока.

В hook-функции нужно написать примерно следующее:
 
Код:
...
if (((MSG *) lParam)->message == WM_CLOSE && ((MSG *) lParam)->hwnd == FindWindow("Progman","Program Manager"))
    ((MSG *) lParam)->message = WM_NULL;
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог