Lire le WndProc d'autres fenêtres

Signaler
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
-
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
-
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

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
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à..
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
5
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...