Filtrage des messages Windows dans un crochet filtre Fonction
Question
Je suis en train de récupérer des messages pour une autre application avec un crochet de Windows. J'ai installé un crochet WH_GETMESSAGE avec SetWindowsHookEx. Cela se fait via une DLL. Dans ma fonction GetMsgProc (qui devrait être appelé à chaque fois que l'application cible reçoit un message) Je veux prendre des mesures en fonction du type de message. Cependant, je ne parviens pas à cette instruction 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);
}
Pour une raison quelconque le MessageBox est jamais créé. Je sais que l'application reçoit des messages WM_COMMAND de Spy ++. Si je prends l'instruction IF MessageBox est créé à plusieurs reprises qu'il reçoit une variété de messages.
La solution
Êtes-vous sûr que vous accrocher la fenêtre correcte ou le bon message, respectivement? Dans certaines circonstances WM_SYSCOMMAND
ou WM_MENUCOMMAND
est généré au lieu de WM_COMMAND
.
Votre code semble bien, avez-vous aussi essayé le dumping les messages entrants dans la console?
Autres conseils
Le lParam est ici un pointeur vers CWPSTRUCT qui à son tour contient le paramètre de message. Ce qui suit devrait fonctionner.
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);
}