Option Explicit
Global HookHandleMouse As Long
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Const WH_MOUSE = 7
Public Const HC_ACTION = 0
' ###################################################################################################
' Dans cette fonction, in lance un hooking souris. Le 1er paramètre définit l'IDHook
' ( en l'occurence la souris ).
' ( L'IdHook est définit par des constantes qui sont dans la visionneuse d'API )
' Le 2ème paramètre est l'adresse de la fonction qui traite les messages windows.
' Attention , "AdressOf" ne peut être utilisé que pour un fonction qui est dans un module.
' Le 3ème paramètre est la DLL qui contient la procédure de Hook ( Ici, c'est l'instance du programme
' qui contient cette procédure ( HookRedirMouse )
' Le dernier paramètre, est le thread sur lequel agit le hook. "0" permet de ne pas définir de thread
' précis, et donc de hooker tous les threads.
' /!\ Si le hook agit sur un thread précis qui a été crée par le programme lui même, il faut
' que le 3ème paramètre ( hmod soit à "NULL" )
' ###Hook Souris###
Function HookMouse() As Integer
On Error GoTo HandledErr
' Lancement du Hook => Redirection des messages Windows sur notre fonction 'HookRedirMouse
HookHandleMouse = SetWindowsHookEx(WH_MOUSE, AddressOf HookRedirMouse, App.hInstance, 0)
' La fonction renvoi 1 si elle à fonctionné, et 0 s'il y a eu une erreur.
HookMouse = 1
Exit Function
HandledErr:
HookMouse = 0
End Function
' Cette fonction est très importante, elle permet de rediriger les messages vers le thread
' d'origine. Si vous ne l'appelez pas avant de quitter, vous devrez rebooter ;-)
Function unHookMouse() As Integer
On Error GoTo HandledErr
' Appel l'API d'Unhooking
UnhookWindowsHookEx HookHandleMouse
' Pareil que précédent, la fonction renvoi 1 ou 0 selon la réussite ou l'echec de la fonction.
unHookMouse = 1
Exit Function
HandledErr:
unHookMouse = 0
End Function
' Voici la fonction qui va traiter les messages filtrés par le hook.
' Le but étant de paralyser la souris, il suffit de ne pas renvoyer les messages
' qui lui sont destinés. Nous renvoyons donc -1 ( Considéré comme valeur Nulle ).
Public Function HookRedirMouse(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
HookRedirMouse = -1
End Function