SIMULATION DU CLAVIER/SOURIS

dragon2222 Messages postés 9 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 22 août 2005 - 20 mai 2005 à 17:53
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011 - 14 déc. 2009 à 22:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31489-simulation-du-clavier-souris

Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 déc. 2009 à 22:37
Ah okay enfait seul 2 arguments dans cette fonction sont utiles
xD

Merci pour ses explications presque 5 ans après !
Ca te replonge dans le BON VIEUX TEMPS n'est-ce pas ?
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
14 déc. 2009 à 20:55
Extrainfo ca sert pas a grand chose.
Je ne saurais pas te le dire avec certitude mais c'est une histoire de variable que tu associe en plus de ta valeur du clavier.
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 déc. 2009 à 19:58
En gros bScan ça sert à rien!

Et dwExtraInfo c'est quoi?

Merci et bonne soirée ;p
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
13 déc. 2009 à 18:44
Autant pour moi ;)

La documentation MSDN laisse comme exemple pour dwFlags ceci :
[in] Specifies various aspects of function operation. This parameter can be one or more of the following values.
KEYEVENTF_EXTENDEDKEY
If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP
If specified, the key is being released. If not specified, the key is being depressed.

En gros soit il rajoute un prefix au code de la touche avec la valeur 0xE0.
(A ma connaissance je ne connais pas cette utilité).
Soit il utilise la variable KEYEVENTF_KEYUP pour relâcher le bouton.
La MSDN utilise pour appuyer sur un bouton : KEYEVENTF_EXTENDEDKEY | 0
et pour relacher le bouton : KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP

le fonction bScan est la même variable que bVk sauf qu'il indique le code en hexa tandis que bVk peut utiliser des touches avec leur define (ex: VK_.....)
Voici un exemple pour le bouton vérouillage numérique : (VK_NUMLOCK, 0x45, 0, 0)
On lui a spécifié ici la valeur "virtuelle" VK_NUMLOCK ainsi que ca valeur en hexa 0x45

Bonne soirée,
Stéphane.
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
13 déc. 2009 à 12:34
On est bien daccord !

Sur msdn il ya ça

VOID keybd_event(
BYTE bVk,
BYTE bScan,
DWORD dwFlags,
DWORD dwExtraInfo
);

bVk
[in] Specifies a virtual-key code. The code must be a value in the range 1 to 254. For a list of virtual-key codes, see Translating Scan Codes to Virtual-Key Codes.

bScan
[in] Specifies a hardware scan code for the key.

dwFlags
[in] Specifies various aspects of function operation. An application can use any combination of the following predefined constant values to set the flags.

dwExtraInfo
[in] Specifies an additional 32-bit value associated with the keystroke.

Et j'ai pas compris a quoi correspondait le deuxième et troisième argument de cette fonction (bScan et dwExtraInfo)
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
13 déc. 2009 à 01:43
Ah je t'assure que la source marche comme ça.

Je fais un key down et un key up tu peux faire une touche arobas (CTRL+ALT+à) en une seule ligne notamment par cette constante "KEYEVENTF_KEYUP".

Les keyup se font à cet endroit :
# keybd_event(x,0,0,0);
# if(nbre==2 || nbre ==3)
# keybd_event(y,0,0,0);
# if(nbre==3)
# {
# keybd_event(z,0,0,0);
# keybd_event(z,0,KEYEVENTF_KEYUP,0);
# }
# if(nbre==2 || nbre ==3)
# keybd_event(y,0,KEYEVENTF_KEYUP,0);
# keybd_event(x,0,KEYEVENTF_KEYUP,0);
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
12 déc. 2009 à 23:54
Ce n'était pas ma question.
En relisant le code j'ai compris deux truks:
- pourquoi mon ordi buguait après que je lançait mes tests.
- comment simuler une combinaison.

Enfait chaque touche enfoncé le reste tant qu'on ne simule pas un Keyup!

En code pur SimulerKey(VK_CONTROL, VK_MENU, 0x30, 3); donerais ça:
keybd_event(VK_CONTROL,0,0,0); //Touche CTRL enfoncé
keybd_event(VK_MENU,0,0,0); //touche ALT enfoncé
keybd_event(0x30,0,0,0); // touche à enfoncé
keybd_event(0x30,0,KEYEVENTF_KEYUP,0); // touche à relevé
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0); // touche Alt relevé
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); // touche CTRL relevé

En chch sur msdn j'ai trouver ça http://msdn.microsoft.com/en-us/library/aa928103.aspx

Dans keybd_event(param1,param2,param3,param4);
- param1 est le code (ascii ou hexadecimal) de la touche à enfoncer.
- param3 est l'état de la touche (enfoncé par default)

Les 2 autres paramètres (param2 et param4) j'ai pas bien compris à quoi ça correspondait.

Sauriez vous me répondre ?

Cordialement Zestyr
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
12 déc. 2009 à 21:29
Bonjour,

Cela fait toujours plaisir 5 ans après de voir que l'intérêt est toujours présent.

En regardant les exemples de la source on peut voir que le dernier paramètre indique combien de touches sont présentes dans la combinaison.
Lorsqu'une touche n'est pas utilisé alors elle vaut 0.
Les exemples ci-dessous reprennent clairement toutes les combinaisons de touches possibles.

ex:
simulation de la touche 'r'
SimulerKey(0x52, 0, 0, 1);

simulation de la combinaison de touches ALT+ENTRER
SimulerKey(VK_MENU, VK_RETURN, 0, 2);

simulation de la combinaison de touches CTRL+ALT+à (touche @)
SimulerKey(VK_CONTROL, VK_MENU, 0x30, 3);

Bon code,
Stéphane.
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
12 déc. 2009 à 12:57
Un grand MERCI, cette source était ce qu'il me fallait !

Quelques petites questions:
Dans keybd_event(param1,param2,param3,param4);
A quoi correspondent les 3 derniers paramètres?

Comment simuler une combinaison de touches ex: Ctrl+C ou Shilft+A? (je pense que les 2questions sont iées)

Merci de votre réponses,

Cordialement Zestyr
cs_rob57530 Messages postés 7 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 29 septembre 2009
29 sept. 2009 à 21:26
Super, mais les codes des touches se trouvent
ici
cs_rob57530 Messages postés 7 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 29 septembre 2009
16 août 2009 à 15:35
Super source merci beaucoup!! :)
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
28 nov. 2007 à 14:54
Salut ReQL
La méthode pour simuler un / est de simuler un shift et un :

Désolé pour le contre temps en espérant que tu as trouvé avant.
kenjomaster Messages postés 29 Date d'inscription samedi 12 mai 2007 Statut Membre Dernière intervention 22 mars 2008
27 nov. 2007 à 21:22
merci ca m a aidé
ReqL Messages postés 1 Date d'inscription vendredi 30 juin 2006 Statut Membre Dernière intervention 16 mai 2007
16 mai 2007 à 00:38
Bonjour,
J'ai étudié ta (très bonne) source et je suis dans l'incapacité de simuler la touche '/' ...
Quelqu'un peut m'aider ? J'ai fait des test dans tout les sens, rien ne marche :s
cs_hwoarang Messages postés 18 Date d'inscription samedi 1 mars 2003 Statut Membre Dernière intervention 27 juin 2008
8 avril 2007 à 22:10
Merci beaucoup. Cette source est vraiment tres utile...
dragon2222 Messages postés 9 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 22 août 2005
20 mai 2005 à 18:33
Ok c'est nikel :)
donc voila une sorte de souris en mode consol.
Le problème, c'est qu'il faudrait qu'elle soit toujours active parceque si on clic et qu'après sa marche plus ...

Voilà son code, avec la fonction de Steph

#include <windows.h>
#include <stdio.h>
#include <conio.h>

void SimulerMouse(int x, int y)
{
// Définir la position du curseur de al souris
SetCursorPos(x, y);
}

void MouseClicGauche()
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
// Simule l'action de relâcher du bouton gauche de la souris
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

void MouseClicDroit()
{
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
// Simule l'action de relâcher du bouton droit de la souris
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}

//---------------------------------------------------------------------------

void main()
{
unsigned int ChoixClSr = 0;

int PosSourisX = 50;
int PosSourisY = 50;

char Direction;

int Vitesse = 10;

bool Encore;

system("cls");

while ( Encore )
{
Direction = getch();

switch(Direction)
{
case 'z' :
PosSourisY = PosSourisY - Vitesse;
break;
case 's' :
PosSourisY = PosSourisY + Vitesse;
break;
case 'd' :
PosSourisX = PosSourisX + Vitesse;
break;
case 'q' :
PosSourisX = PosSourisX - Vitesse;
break;
case 'y' :
Vitesse++;
break;
case 'u' :
Vitesse--;
break;
case 'h' :
MouseClicGauche();
break;
case 'j' :
MouseClicDroit();
break;
case 'm' :
Encore = false;
break;
default :
break;
}

system("cls");
printf("Vitesse : %d\n", Vitesse);
printf("PositionX : %d\n", PosSourisX);
printf("PositionY : %d\n", PosSourisY);

SimulerMouse(PosSourisX, PosSourisY);
}
}
Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012
20 mai 2005 à 17:56
Dans ce cas la si tu as la souris et que tu es sous WindowsXP tu peut faire :

Demarrer->Executer->osk.exe

C'est un clavier Virtuel utilisable avec la souris.

:D:D:D

++ Nexus
dragon2222 Messages postés 9 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 22 août 2005
20 mai 2005 à 17:53
Le truc chouette a faire maintenant, c'est de faire un programme qui affiche un clavier et une souris.
On pourrait alors le contrôler soit le clavier avec la souris, soit la souris avec le clavier (Pratique quand ma mère me prive de PC :( )

je vais déja essayer sans l'interface graphique :)
Rejoignez-nous