WM_COMMAND != WM_COMMAND ((
От: Anatol83  
Дата: 29.01.08 08:09
Оценка:
Есть чужое окно, для которого надо отлавливать нажатие кнопки. Написал хук, повесил его на WH_GETMESSAGE и жду когда этому окну придет WM_COMMAND от кнопки.

Утилита типа spy++ показывает что мессага приходит, но мой хук не ловит её. После секиса удалось узнать что вместо WM_COMMAND, который имеет ID типа 0х111 ловится другая месага (смотрю по msg->message в хуке), ID который что-то типа 49ХХ2. Если вместо WM_COMMAND подставить это значение, то все хорошо.

Вопрос: Что это может быть?
Re: WM_COMMAND != WM_COMMAND ((
От: Pavel Dvorkin Россия  
Дата: 29.01.08 12:12
Оценка:
Здравствуйте, Anatol83, Вы писали:

A>Есть чужое окно, для которого надо отлавливать нажатие кнопки. Написал хук, повесил его на WH_GETMESSAGE и жду когда этому окну придет WM_COMMAND от кнопки.


A>Утилита типа spy++ показывает что мессага приходит, но мой хук не ловит её. После секиса удалось узнать что вместо WM_COMMAND, который имеет ID типа 0х111 ловится другая месага (смотрю по msg->message в хуке)


Номер сообщения ?


>ID который что-то типа 49ХХ2. Если вместо WM_COMMAND подставить это значение, то все хорошо.


A>Вопрос: Что это может быть?


Скорее всего ты что-то напутал в своем обработчике. Неправильно байты интерпретируешь. Код перехватчика покажи.
With best regards
Pavel Dvorkin
Re[2]: WM_COMMAND != WM_COMMAND ((
От: Anatol83  
Дата: 29.01.08 13:52
Оценка:
PD>Скорее всего ты что-то напутал в своем обработчике. Неправильно байты интерпретируешь. Код перехватчика покажи.


static LRESULT CALLBACK msghook(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0)
      {
       CallNextHookEx(hook, nCode,
                   wParam, lParam);
       return 0;
      }

    LPMSG msg = (LPMSG)lParam;

    if(msg->message == WM_COMMAND && msg->hwnd == hMyWnd) // не работает
      PostMessage(hWndServer,
                  WM_USER +1,   
                  0, 0); 

    return CallNextHookEx(hook, nCode, wParam, lParam);
}


если заменить msg->message == WM_COMMAND на msg->message == MY_WM_MESS то все работает... Может там дескриптор окна как-то xor-ится... информации по этоиу не нашел.. Да и вообще, если отлавливать только WM_COMMAND сообщения, то их приходит гараздо меньше чем надо

PD>Номер сообщения ?


точно непомню, что-то типа 49912 (дестярично)
Re: WM_COMMAND != WM_COMMAND ((
От: Аноним  
Дата: 29.01.08 21:46
Оценка: +1
A>Вопрос: Что это может быть?
WH_GETMESSAGE ловит сообщения посланные через PostMessage
те которые через Send — надо ловить например WH_CALLWNDPROC
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.