1

Je travaille sur un projet nécessitant une entrée virtuelle codée dans Microsoft Visual Studios à l'aide de l'en-tête windows.h. Pour ce faire, je suis en utilisant la méthode et la méthode VkKeyScan() keybd_event():Entrée de clavier virtuel C fonctionnant de manière sélective

keybd_event(VkKeyScan('w'), 0, 0, 0); 
keybd_event(VkKeyScan('w'), 0, KEYEVENTF_KEYUP, 0); 

Cependant, l'entrée virtuelle est reconnu que par certains programmes, tels que le Bloc-notes, Invite de commandes, les navigateurs et autres applications qui utilisent des champs de texte. Le but de l'entrée virtuelle pour mon projet est d'utiliser un client pour contrôler "VisualGameBoyAdvance" qui prend une entrée au clavier qui est ensuite traduite en une commande telle que 'w' = start, 'z' = un bouton, etc

Pourquoi l'entrée virtuelle est-elle lue lors de l'utilisation d'applications dans des champs de texte, mais pas en tant que commandes? Existe-t-il des méthodes alternatives du fichier d'en-tête windows.h ou y a-t-il de meilleures méthodes dans l'en-tête?

Mise à jour: J'ai essayé d'utiliser VkKeyScanEx() comme une méthode alternative pour prendre l'entrée virtuelle comme un effort dans le noir. Comment spécifier mon identificateur de paramètres régionaux d'entrée? J'ai essayé d'utiliser UTF-8 et en_AU.UTF-8, sans chance. Y a-t-il un graphique qui traduit comment spécifier cela?

J'ai aussi essayé d'utiliser

keybd_event(GetKeyState('w'), 0, 0, 0); 
keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0); 

Ce qui ne fonctionne pas du tout et essayé

while(1){ 
     /*Sleep(1000); 
     keybd_event(GetKeyState('w'), 0, 0, 0); 
     keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0);*/ 
     // Pause for 5 seconds. 
    Sleep(500); 

    // Set up a generic keyboard event. 
    ip.type = INPUT_KEYBOARD; 
    ip.ki.wScan = 0; // hardware scan code for key 
    ip.ki.time = 0; 
    ip.ki.dwExtraInfo = 0; 

    // Press the "W" key 
    ip.ki.wVk = 0x57; // virtual-key code for the "a" key 
    ip.ki.dwFlags = 0; // 0 for key press 
    SendInput(1, &ip, sizeof(INPUT)); 

    // Release the "A" key 
    ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release 
    SendInput(1, &ip, sizeof(INPUT)); 

    // Exit normally 
    } 

Répondre

0

Le problème était que le jeu était en cours d'exécution si DirectX, ce qui a empêché les coups de clavier virtuel. En déchirant le jeu à partir du système, il a évité DirectX tous ensemble et a bien fonctionné :)