Récuperer evenement click Souris - Hook

Signaler
Messages postés
22
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
28 avril 2007
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Bonjour,

Je voudrais pouvoir connaitre, a chaque instant et sur chaque programme qui tourne, si l'utilisateur click sur sa souris.
Par exemple, afficher un MessageBox a chaque foi que l'utilisateur click sur sa souris n'importe où sur l'écran.

J'ai fait des recherches du coté des mousehook,etc,.. mais je ne m'en sors pas..

Pouvez-vous m'aider?

8 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
il n'est pas possible de faire de hook global en C#... et plus généralement en .net


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Si si Seb c'est possible avec un hook WH_MOUSE_LL directement dans un exe et uniquement en code managé.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
je veux bien un exemple alors :)


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Tu as un exemple >ici<.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
Merci :) t'es un chef !


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
Je comprend pas tout là, j'ai fais un test mais ca plante sous VS2005 en .NET 2.0 et ca fonctionne avec SharpDevelop en .NET 2.0 ... mystere.
Il me fait l'exception après l'appel à SetWindowsHookEx()
que ce soit pour le clavier ou la souris.
J'ai remplacer les code pour que ce ne soit pas en hooks global ( 2 et 7 pour respectivement WH_KEYBOARD et WH_MOUSE) mais ça plante également.
Il faut que je prenne la solution sur le support MS pour les paramètres de SetWindowsHookEx()
.

public const int WH_MOUSE_LL = 14;
//mouse hook constant

hMouseHook = SetWindowsHookEx(WH_MOUSE_LL,
MouseHookProcedure,

Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);

> ca leve l'exception


public
const
int WH_MOUSE = 7;

hMouseHook = SetWindowsHookEx(WH_MOUSE,
MouseHookProcedure,
(
IntPtr)0,

AppDomain.GetCurrentThreadId());

> ca fonctionne mais bien sur, en interne à la form

Alors là je ne comprends pas pkoi.
En tout cas bien pratique ce petit truc pour faire une sorte d'ecran de veille ...

f.colo
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
Un extrait d'un hook que j'avais programmé y'a longtemps et qui marchait parfaitement ( .NET 1.1 )

public static void Install( )
{
if ( hook = = IntPtr.Zero )
{
proc = new HookProc( MouseHook.LowLevelMouseProc );
hook = SetWindowsHookEx( WH.MOUSE_LL, proc, Marshal.GetHINSTANCE( typeof( MouseHook ).Module ) , 0 );

if ( hook == IntPtr.Zero )
{
throw new System.ComponentModel.Win32Exception( );
}
}
}



public static void Uninstall( )
{
if ( hook != IntPtr.Zero )
{
bool result = UnhookWindowsHookEx( hook );
proc = null;
hook = IntPtr.Zero;


if ( !result )
{
throw new System.ComponentModel.Win32Exception( );
}
}
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
33
MouseHook c'est la classe qui content la fonction de rappel LowLevelMouseProc.