Hook clavier + souris ( permet un bloquage du clavier et/ou de la souris )

Soyez le premier à donner votre avis sur cette source.

Vue 18 647 fois - Téléchargée 1 698 fois

Description

Cette source a pour but de présenter le Hooking. Le hooking est un moyen de "capturer" les messages envoyés à notre application, de les traiter, et de décider de les faire suivre ou non. Ici, nous allons juste capturer les messages du clavier et ne pas les renvoyer. Ainsi, le clavier ne fonctionnera plus. Pareil pour la souris. Biensur, il y a d'autres moyens de bloquer le clavier ou la souris beaucoup plus simple, mais cette technique permet de beaucoup de chose.

Je sais aussi qu'il y a de nombreuse source sur le bloquage clavier et souris mais elles ne marchaient pas grace au hooking et une fois le bloquage effectué, il fallait rebooter...

PS: Je ne l'ai pas encore commenté, mais ça viendra dans la semaine...

Source / Exemple :


Option Explicit
Global HookHandleClip As Long
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 WH_KEYBOARD_LL = 13

Public Const HC_ACTION = 0

' ###################################################################################################
' Hook Clavier#######################################################################################
' ###################################################################################################

Function HookClipBoard() As Integer
On Error GoTo HandledErr

' Dans cette fonction, je lance un hooking clavier. Le 1er paramètre définit l'IDHook
' ( en l'occurence le clavier ).
' ( 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 ( HookRedirClip )

' 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" )

' Lancement du Hook => Redirection des messages Windows sur notre fonction HookRedirClip
HookHandleClip = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookRedirClip, App.hInstance, 0)

' La fonction renvoi 1 si elle à fonctionné, et 0 s'il y a eu une erreur.
HookClipBoard = 1

Exit Function

HandledErr:
HookClipBoard = 0

End Function

Function UnHookClipBoard() As Integer
On Error GoTo HandledErr

' 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 ;-)

' Appel l'API d'Unhooking
UnhookWindowsHookEx HookHandleClip

' Pareil que précédent, la fonction renvoi 1 ou 0 selon la réussite ou l'echec de la fonction.
UnHookClipBoard = 1

Exit Function

HandledErr:
UnHookClipBoard = 0

End Function

Public Function HookRedirClip(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

' Voici la fonction qui va traiter les messages filtrés par le hook.
' Notre but étant de paralyser le clavier, il nous suffit de ne pas renvoyer les messages
' qui lui sont destinés. Nous renvoyons donc -1 ( Considéré comme valeur Nulle ).

HookRedirClip = -1

End Function

' ###################################################################################################
' Hook Souris########################################################################################
' ###################################################################################################

' Le principe étant strictement équivalent il nous suffit juste de changer la constante du IdHook.
' Donc : Voir plus haut ! :p

Function HookMouse() As Integer
On Error GoTo HandledErr

HookHandleMouse = SetWindowsHookEx(WH_MOUSE, AddressOf HookRedirMouse, App.hInstance, 0)
HookMouse = 1

Exit Function

HandledErr:
HookMouse = 0

End Function

Function unHookMouse() As Integer
On Error GoTo HandledErr

UnhookWindowsHookEx HookHandleMouse
unHookMouse = 1

Exit Function

HandledErr:
unHookMouse = 0

End Function

Public Function HookRedirMouse(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
HookRedirMouse = -1
End Function

Conclusion :


Je me suis inspiré de la source de Ovidiu Crisan.
http://vbwork.4mg.com

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018

Grand merci à toi "MaxSoldier", ta source va me faire gagner un temps précieux ...

encore merci ..!
Messages postés
13
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
8 octobre 2009

bonjour,
c'est très intéressant !!!
pour ma part, je cherche à brancher 2 souris : l'une pour une utilisation "normale", l'autre pour récupérer les codeurs d'une souris à boule... j'aurai donc besoin de désactiver une seule des 2 souris et surtout récupérer le nombre d'impulsions générée par cette souris pour exploiter les résultats sous VB6 !!!
quelqu'un sait-il m'aider ??
merci d'avance,
Bertrand
Messages postés
150
Date d'inscription
samedi 8 avril 2006
Statut
Membre
Dernière intervention
1 mai 2012
2
Bonjour tous le monde :)

Bon, je sais, c'est une vieille source, mais j'ai un problème ...
Le Hook Souris fonctionne bien mais dès que je passe sur la barre des tache ça la "unHook" ...
Savez-vous (planter les choux ... ah non c'est pas ça ...) d'où cela peut venir et comment résoudre ce problème ?

Je précise que je suis sous XP avec un style (légèrement :) ) modifié ...
Messages postés
23
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 mars 2008

good work !
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Mammamia... on est pas sur caramail ici, ni sur meetic les gars! ;-)
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.