Lire le WndProc d'autres fenêtres

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 8 déc. 2008 à 05:35
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 8 déc. 2008 à 16:15
Bonjour,

Je cherche un moyen pour lire le WndProc d'une fenêtre n'appartant pas à mon programme. Je souhaite détecter les WM_ACTIVATE et d'autres et ça doit pouvoir envoyer une notification à mon logiciel quand certains messages pour certaines windows sont détectés. Je sais pas trop comment m'y prendre...

Merci :D

3 réponses

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
8 déc. 2008 à 07:11
Je suis sur une bonne piste, j'ai fait une hook c++ sur WH_CALLWNDPROC

ensuite, dans CallWndProc, je recupère CWPSTRUCT* cwpstruct = (CWPSTRUCT*)lParam;

Mais comme le hook est valable pour toutes les windows, je dois filtrer.

Si je code la valeur de la fenetre que je veux tracker en dur, ca marche, ie :

LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0)
        return CallNextHookEx(handleHook, nCode, wParam, lParam);

    CWPSTRUCT* cwpstruct = (CWPSTRUCT*)lParam;

    if((HWND)0x00020afa == cwpstruct->hwnd)
    {
        MessageBox(NULL, "TEST","LOL",MB_OK);
    }

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

Mais j'aimerai pouvoir change la valeur de la fenetre à tracker, alors j'ai mis en global dans ma dll:
HWND hWindow;

Puis une fonction toute conne:
VOID __stdcall HookHwnd(HWND hWnd)
{
    hWindow = hWnd;
}

Pour pouvoir tester avec la valeur dynamique:
if(hWindow == cwpstruct->hwnd)

Mais là ca marche plus... Pourtant j'ai vérifié je passe bien à HookHwnd la bonne valeur 0x00020afa pour ce test...

Si un guru peut m'aider, là je vois vraiment pas et ça m'énerve... Jpeux vous envoyer le projet aussi si vous voulez ;o

Merci :D
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
8 déc. 2008 à 14:47
Salut, les variables globales d'une DLL ne sont pas partagées entre processus, chaque processus a ses propres variables globales, faut voir si ton problème vient de là..
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
8 déc. 2008 à 16:15
On m'a conseillé d'utiliser une section shared pour la gestion de ces variables, et ça marche donc le problème vient bien de là, même si j'ai du coup du mal à comprendre ce que fait la fonction VOID __stdcall HookHwnd(HWND hWnd) à l'éxécution...
0