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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?