Problème avec la création d'un hook souris global
Je sous sous W10, toutes mises à jour faites.
J’utilise Delphi 6 Personal Edition pour réaliser une DLL avec des fonctions de service, utilisée par un programme réalisé dans un autre langage.
Je tente d’implémenter un Hook des évèmenents souris concernant la roue de la souris – rotation vers le haut/bas et clic sur la roue. Pour cela, je commence par installer un hook du type WH_MOUSE_LL . Je mémorise l’adresse de l’ancienne WndProc dans une variable globale. Comme je suis dans une DLL et je n’ai pas accès à hInstance du progamme appelant (bien que j’aie le handle de sa fenêtre principale), je tente d’installer un hook global de la manière suivante :
Code:
1 2 3 4 5 6 7 8 9 10
| Const
WH_MOUSE_LL = 14;
var
GenHookMouseWndProc : integer ;
Function SetMyHook : integer ; stdcall ; export ;
begin
GenHookMouseWndProc := SetWindowsHookEx(WH_MOUSE_LL, @GenHookMouse_LL_FUNC, 0, 0); // tenter le hook
Result := 0 ;
End ; |
Cela « marche », car GenHookMouseWndProc est différent de zéro.
Ma fonction callback pour le hook est la suivante :
Code:
1 2 3 4
| function GenHookMouse_LL_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(GenHookMouseWndProc[i], nCode, wParam, lParam);
End ; |
Je sais, elle ne fait rien – c’est juste pour m’assurer que le principe du hook fonctionne.
Problème : dès que le hook est installé, le programme part dans une boucle infinie (le sablier s’affiche) puis disparaît finalement purement et simplement.
Question : Qu’est-ce que je n’ai pas compris dans l’installation d'un hook souris global ?