Keybd_event

beb_aij_hi Messages postés 4 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 8 octobre 2009 - 13 mars 2008 à 14:39
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 17 mars 2008 à 12:16
salut.
j'essaye de simuler une frappe clavier avec keybd_event et il y a un truck qui m'echappe.

voici un bout de code:

#include <windows.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
SDL_Delay(10000);
keybd_event(0x60,0,0,0);
SDL_Delay(10000);
keybd_event(0x60,0,KEYEVENTF_KEYUP,0);
}

d'apres ce que j'ai compris

keybd_event(0x60,0,0,0);

SDL_Delay(10000);

keybd_event(0x60,0,KEYEVENTF_KEYUP,0);
devrais simuler l'appuis sur la touche0, attendre 10s puis relacher la touche. mais malheureusement quand je le teste sur le bloc note ça ne marque qu'un seul 0 alors que je souhaite que ça continue a marquer des 0 tant que je n'ai pas relacher la touche.

voyez vous ou est l'erreur dans le code?

5 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
13 mars 2008 à 15:00
Salut,


Pas le temps de voir ça en détail, mais si tu ne t'en sors pas avec keybd_event, tu peux utiliser PostMessage avec des WM_KEYDOWN.
0
beb_aij_hi Messages postés 4 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 8 octobre 2009
14 mars 2008 à 13:14
je ne souhaite pas changer de fonction je cherche a resoudre ce probleme plutot que d'abandoner cette fonction...
si vous avez des idées...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
14 mars 2008 à 17:06
Bon bon...


Quand on garde appuyer, une série de WM_KEYDOWN est envoyée à l'appli qui a le focus.


On va donc utiliser keybd_event plusieurs fois.
#include <windows.h>

#pragma comment(linker, "/entry:main")
int _cdecl main()
{
int nStart;

// Pour laisser le temps de changer de fenêtre
Sleep(2000);

nStart = GetTickCount();
do
{
keybd_event(0x60, 0, 0, 0);
Sleep(1);
}
while (GetTickCount() - nStart < 10000);

keybd_event(0x60, 0, KEYEVENTF_KEYUP, 0);
return 0;
}
0
beb_aij_hi Messages postés 4 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 8 octobre 2009
16 mars 2008 à 21:16
dsl mais là tu ne fait que simuler plusieurs appuis sur la meme touche.
je souhaite vraiment simuler un maintien de la touche en question.
en gros si tu vas modifier la frequence de repetition dans les option clavier tu changeras aussi la frequence simulé, ce qui n'est pas le cas sur ta solution.
0

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

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
17 mars 2008 à 12:16
Alors là, oui mais non. Je crois que pour ce que tu veux faire, il faut
que tu passe entre le clavier et Windows, ce que tu ne pourra
probablement surtout pas faire avec keyb_event, SendMessage ou autre
fonction courante.


Nettement plus simple de faire comme j'ai fait plus haut. Et presque
même résultat, à la vitesse de répétition près il est vrai... Mais bon,
ça doit se trouver dans le registre.


Quand l'utilisateur appuie sur les touches du clavier, Windows envoie
des messages à l'application qui a le focus. Tu peux utiliser spy++
fournit avec Visual Studio pour intercetper les messages et voir
précisément ce qui est envoyé à l'application. Tu verras que c'est côté
Windows que la répétition est gérée.
0
Rejoignez-nous