Detecter, simuler un clic de souris

Résolu
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009 - 5 févr. 2006 à 16:28
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 6 févr. 2006 à 17:33
Bijour
je cherche a detectet et simuler par la suite un clic de sourie.
donc je pensais recuperer les coordonées de la sourie a chaque clic ainsi que le temps passé entre les clic
le probleme est que j'arrive avec .net à les detecter dans la form mais ce qui m'interesse c'est de detecter ces clic et recuperer ces coordonées or de la form... par exemple sur le bureau
donc je pense qu'on doit passer par les api. mais je suis pas trop opte avec les api. ..

je suis sur que quelqu'un a deja posé la question mais la fonction recherche ne semble pas marcher aujourd(hui...

donc voila un petit peu d'aide? :)

au fait connaissez vous un bon site avec pleins de fonctions des api repertoriées?

la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société

14 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 févr. 2006 à 16:51
Salut,

Pour monitorer les messages non destinés à l'application, il faut mettre en place un hook global (system-wide hook).
En général ça nécessite du code non managé, mais dans ton cas tu devrais pouvoir t'en sortir sans, juste en utilisant SetWindowsHookEx avec WM_MOUSE_LL.

Le meilleur site sur les APIs reste encore la section Win32 and COM Development dans la MSDN Library :-)
On peut aussi citer le site PInvoke.net qui est bien pratique pour les définitions des imports dans le code managé.

/*
coq
MVP Visual C#
*/
1
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 févr. 2006 à 17:03
Salut, oui soit un LowLevelMouseHook, soit pour une application multimédia DirectInput en mode background. Pour simuler un clique de souris y'a la fonctions mouse_event ou SendInput qui est plus compliquée. Le mieux pour connaitre l'API Win32 c'est encore d'installer le Platforme SDK.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 févr. 2006 à 17:08
(A noter quand même qu'il vaut mieux utiliser SendInput que mouse_event.)

/*
coq
MVP Visual C#
*/
0
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009
6 févr. 2006 à 09:38
ok merci a vous !
je vais regarde un peu toutes ces fonctions...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009
6 févr. 2006 à 09:50
en fait je suis allé voir ton site coq
excellent ce site!

voila ce que j'ai lu

This will enable you to install application hooks. However, you cannot implement global hooks in Microsoft .NET Framework. To install a global hook, a hook must have a native dynamic-link library (DLL) export to inject itself in another process that requires a valid, consistent function to call into. This requires a DLL export, which .NET Framework does not support. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.

donc si je comprend bien dans tuos les cas, vu que je suis en code managé, meme avec un hook je ne pourrai pas "capturer" les events de la sourie or de l'appli ?

je crois qu eje vais le faire en c++ ;)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 févr. 2006 à 10:06
Relis plutôt mon "mais" et renseigne toi sur WH_MOUSE_LL ;-)

/*
coq
MVP Visual C#
*/
0
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009
6 févr. 2006 à 10:07
yep mais je me dis que ça peut etre une bonne occasion pou rme remettre au c++

et ça me fais bizarre apres deux ans de me remettre au c++
j'ai l'impression de savoir rien faire :/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 févr. 2006 à 10:18
Moui, ça fait souvent cet effet là :p
Il y a quelques temps j'avais fait un petit truc du genre : HOOK GLOBAL (SYSTEM-WIDE HOOK) - BLOCAGE DE TOUCHES

Dans ton cas il va falloir que tu puisses faire une remontée d'infos vers le code managé en mettant en place des callback.
Bon courage :-)

/*
coq
MVP Visual C#
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 févr. 2006 à 11:51
Ah vi je confirme pour l'effet C++ : )

Par contre je ne vois pas trop l'interêt de passer par une DLL en C/C++ alors que le hook WH_MOUSE_LL peut être totalement codé en C# malgré ce que dit Microsoft !
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 févr. 2006 à 12:11
Ils parlaient des hook globaux dans leur généralité, les 2 LL sont des exceptions :-)

D'ailleurs ils l'ont bien dit ici : http://support.microsoft.com/kb/318804/en-us

Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.


Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.

/*
coq
MVP Visual C#
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 févr. 2006 à 12:37
Je connais cette page, oui ils l'ont dit, mais après que les exemples ce soit multipliés sur le net : )

La doc le disait quand même mais fallait comprendre : "the WH_MOUSE_LL hook is not injected into another process. Instead, the context switches back to the process that installed the hook and it is called in its original context. Then the context switches back to the application that generated the event."

Je connais bien aussi ton hook en C, je l'avais étudié à l'époque : )
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 févr. 2006 à 13:19
Concernant les exemples, je ne pense pas que ce soit lié à l'info, mais plutôt au fait que le seul "problème" avec les WH_*_LL est qu'ils nécessitent du NT.
Hors "à l'époque", le parc Win98 était encore relativement important, dans le sens qu'il fallait souvent en tenir compte lors du développement.
Maintenant je pense que la donne à bien changer, même si il doit rester pas mal de Win 98 en circulation.
:-)

/*
coq
MVP Visual C#
*/
0
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009
6 févr. 2006 à 17:23
Maintenant je pense que la donne à bien changer, même si il doit rester pas mal de Win 98 en circulation.$


> deja je peux te dire que beaucoup d'ecoles (lycée colleges fac) sont sous win98 :/
ils tardent a changer
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 févr. 2006 à 17:33
Oui je me doute bien, mais je disais ça dans le sens qu'on s'en soucie probablement beaucoup moins lors de la conception.
En gros : "Si ils ne peuvent pas l'utiliser, tant pis !" (je ne parle évidemment pas des cas des développements "à la carte")

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous