Фильтрация сообщений Windows в функции Hook Filter - PullRequest
1 голос
/ 18 мая 2009

Я пытаюсь получить сообщения для другого приложения с помощью хука Windows. Я настроил хук WH_GETMESSAGE с SetWindowsHookEx. Это делается через DLL. В моей функции GetMsgProc (которая должна вызываться всякий раз, когда целевое приложение получает сообщение) я хочу предпринять действия, основанные на типе сообщения. Однако у меня возникли проблемы с этим утверждением if.

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){
    if(((MSG*)lParam)->message == WM_COMMAND){
        MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK);
    }

    return CallNextHookEx(g_MessageHook,code,wParam,lParam);
}

По какой-то причине MessageBox никогда не создается. Я знаю, что приложение получает сообщения WM_COMMAND от Spy ++. Если я уберу оператор IF, MessageBox будет создаваться снова и снова, так как он получает множество сообщений.

Ответы [ 2 ]

1 голос
/ 18 мая 2009

Вы уверены, что подключаете правильное окно или правильное сообщение, соответственно? При некоторых обстоятельствах генерируется WM_SYSCOMMAND или WM_MENUCOMMAND вместо WM_COMMAND.

Ваш код выглядит нормально, вы также пытались сбросить входящие сообщения в консоль?

0 голосов
/ 18 мая 2009

LPARAM здесь - это указатель на CWPSTRUCT, который в свою очередь содержит параметр сообщения. Следующее должно работать.

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){
    if(((CWPSTRUCT*)lParam)->message == WM_COMMAND){
        MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK);
    }

    return CallNextHookEx(g_MessageHook,code,wParam,lParam);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...