dragon2222
Messages postés9Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention22 août 2005
-
20 mai 2005 à 17:53
Zestyr
Messages postés466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 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.
Zestyr
Messages postés466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 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és163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 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és163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 octobre 2011 13 déc. 2009 à 12:34
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és163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 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é
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és163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és466Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention17 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és7Date d'inscriptionsamedi 8 mars 2008StatutMembreDernière intervention29 septembre 2009 29 sept. 2009 à 21:26
cs_rob57530
Messages postés7Date d'inscriptionsamedi 8 mars 2008StatutMembreDernière intervention29 septembre 2009 16 août 2009 à 15:35
Super source merci beaucoup!! :)
Steph115
Messages postés163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és29Date d'inscriptionsamedi 12 mai 2007StatutMembreDernière intervention22 mars 2008 27 nov. 2007 à 21:22
merci ca m a aidé
ReqL
Messages postés1Date d'inscriptionvendredi 30 juin 2006StatutMembreDernière intervention16 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és18Date d'inscriptionsamedi 1 mars 2003StatutMembreDernière intervention27 juin 2008 8 avril 2007 à 22:10
Merci beaucoup. Cette source est vraiment tres utile...
dragon2222
Messages postés9Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention22 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 ...
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);
}
Steph115
Messages postés163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDerniè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és9Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention22 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 :)
14 déc. 2009 à 22:37
xD
Merci pour ses explications presque 5 ans après !
Ca te replonge dans le BON VIEUX TEMPS n'est-ce pas ?
14 déc. 2009 à 20:55
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.
14 déc. 2009 à 19:58
Et dwExtraInfo c'est quoi?
Merci et bonne soirée ;p
13 déc. 2009 à 18:44
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.
13 déc. 2009 à 12:34
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)
13 déc. 2009 à 01:43
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);
12 déc. 2009 à 23:54
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
12 déc. 2009 à 21:29
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.
12 déc. 2009 à 12:57
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
29 sept. 2009 à 21:26
ici
16 août 2009 à 15:35
28 nov. 2007 à 14:54
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.
27 nov. 2007 à 21:22
16 mai 2007 à 00:38
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
8 avril 2007 à 22:10
20 mai 2005 à 18:33
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);
}
}
20 mai 2005 à 17:56
Demarrer->Executer->osk.exe
C'est un clavier Virtuel utilisable avec la souris.
:D:D:D
++ Nexus
20 mai 2005 à 17:53
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 :)