Simulation clavier/souris

Résolu
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 7 oct. 2005 à 15:16
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 8 oct. 2005 à 18:52
Bonjour.

Voial, mon but est de simuler l'appui d'une touche ou d'un séquence de touches du clavier.
M'étant penché du coté de l'API win, j'ai réussi à faire quelque chose qui y ressemble (PostMessage). Seulement, ce que je souhaiterai faire est plus compliqué: j'aimerai envoyer le message non pas a un instance d'application mais au systeme de facon plus générale. De facon à ce que le message soit retransmis a l'appli qui a le focus. Je sais pas si c'est réellement faisable en C#, s'il existe quelque chose du coté de l'API win, ou autre, c'est pour ca que j'aimerai un peu d'aiguillage =)

Merci d'avance.

7 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 oct. 2005 à 06:39
Salut, si il s'agit de simuler l'appuie sur une touche au niveau du sytème tu peux utiliser la fonction keybd_event.


[
DllImport(
"user32.dll", EntryPoint =
"keybd_event" ) ]

private
static
extern
void KeyboardEvent(
byte vk,
byte scan,
uint flags,
UIntPtr extra );

private
const
int KEYEVENTF_EXTENDEDKEY = 0x1;

private
const
int KEYEVENTF_KEYUP = 0x2;
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 oct. 2005 à 17:17
Si c'est un jeu, y'a de grandes chances que le clavier soit géré avec DirectInput, le principe de DirectInput c'est de communiquer directement avec le driver du périphérique mais en général on n'utilise pas DirectInput pour entrer du texte car c'est plutôt fastidieux, et vu que le 2éme {ENTER} fonctionne, je pense à un contrôle, et si ça ne marche pas c'est peut être parce que le contrôle n'a pas le focus.
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 oct. 2005 à 15:27
utilise plutot la classe SendKey

Sébastien FERRAND
0
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
7 oct. 2005 à 15:41
Merci pour la réponse rapide. J'ai eu du mal a trouvé la classe parce que c'est SendKeyS et que les recherches dans MSDN ne font pas le lien.
Je peux pas tester maintenant mais je le ferai ce soir.
Merci =)

Ordinastie.
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 oct. 2005 à 15:44
de rien ;)

Sébastien FERRAND
0
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
8 oct. 2005 à 16:09
Merci pour vos réponses. Ca marche pas tout a fait, mais presque =)
Ce que j'essaye de faire, c'est de quitter un jeu automatiquement, en envoyant grosso-modo:
{ENTER}
/quit
{ENTER}

Les deux propositions font la même chose, si j'appuie moi meme sur la touche ENTER, l'input est bien passé, et "/quit" s'affiche bien et le deuxieme enter passe bien.
Le problème, c'est que c'est le premier qui passe pas. Comme c'est vraiment "dans" le jeu, la gestion de l'input du clavier doit pas etre la meme (directInput?) qu'au moment de taper la commande et ca marche pas :/

Je vais essayer de voir si du coté de SendInput ca marche mieux, mais j'y crois pas trop... faut que j'arrive a refaire la structure et c'est pas gagné.

L'ideal, je crois que ca serait de pouvoir simuler quasiement au niveau hardware, mais je sais pas si c'est faisable.
En tout cas, si vous avez d'autres idées, je suis preneur ;)

Ordinastie.
0
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
8 oct. 2005 à 18:52
J'ai continué de faire quelque teste, et bizarrement, je peux utiliser la souris. Je trouve ca etonnant qu'elle soit pas utilisée avec DirectInput aussi.

Sinon, il y aurait un moyen de déclencher l'evenement au niveau du driver? Pour que le jeu ait l'impression de l'appui sur la touche?

Si c'est pas trop compliqué, ca m'interesserait, sinon, tant pis, je me debrouillerai avec la souris =)

Merci encore pour le réponses
Ordinastie.
0
Rejoignez-nous