2010-06-04 4 views
0

J'ai fait une interface avec un contrôleur NES avec un atxmega, qui envoie les clés en série. Le problème réside dans le programme qui lit l'entrée et envoie keybd_events en conséquence.WINAPIs keybd_event() non reconnu dans certains programmes

if(szBuff[0] & BTN_LEFT) { 
    keybd_event(VkKeyScan('j'), 0, 0, 0); 
    keybd_event(VkKeyScan('j'), 0, KEYEVENTF_KEYUP, 0); 
} 

Le problème est, il ne parvient pas à se faire reconnaître comme un « j » dans un émulateur NES, alors qu'il le fait dans un navigateur par exemple. Des idées?

Répondre

0

Difficile d'y répondre sans avoir expliqué le fonctionnement de l'émulateur Nintendo. Mais vous devrez fournir le code de clé virtuelle à VkKeyScan(). Ce qui est 'J', pas 'j'. Tant que la touche Maj n'est pas pressée, Windows traduira cela en un message WM_CHAR qui génère un 'j'.

Notez que keybd_event() prend une clé virtuelle et un code de balayage. Vous passez le code d'analyse en tant que clé virtuelle. Correction:

keybd_event('J', VkKeyScan('J'), 0, 0); 
+0

Je suis désolé, l'émulateur est FCEUX, mais je n'ai pas réussi à trouver comment il lit l'état du clavier. Une chose que j'ai remarquée, dans la configuration du bouton, c'est quand un événement a été envoyé (le bouton a été enfoncé), mais il suppose que le code envoyé est 0x00. Passer à 'J' ne fonctionnait pas. Keybd_event peut-il envoyer plus que juste la touche? Je ne connais pas WINAPI. – John

+0

Fantastique, ça marche parfaitement maintenant. Merci pour l'aide! – John