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.

Était-ce utile?

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top