2017-12-18 2 views
-2

Ich habe diese C++ Funktion, die Virtual Key und Presse/Lassen Sie die Taste erhält:C++: Tastendruck simulieren und erhalten, wenn gedrückt unter Windows

void SendKey (WORD wVk, bool press) { 
    keybd_event(wVk, 0, press? 0 : KEYEVENTF_KEYUP, 0); 
} 

Aber es drücken Sie einfach die Taste 1 Mal, nicht ständig wie ich es erwartet hatte.

Ich bin Bau einer JoyPad Simulation, so, ich brauche jeweils KeyDown und KeyUp zu konfigurieren, das ein wenig C++ Prozess ist, der durch cmd der Schlüssel und die Art (Down, Drücken oder Release) lautet:

#define WINVER 0x0500 
#include <windows.h> 
#include <iostream> 

using namespace std; 

void SendKey (WORD wVk, bool press) { 
    keybd_event(wVk, 0, press? 0 : KEYEVENTF_KEYUP, 0); 
} 

void PressKey (WORD wVk) { 
    SendKey(wVk, true); 
    Sleep(30); 
    SendKey(wVk, false); 
} 

int main() { 
    int key; 
    char type; 

    while(true) { 
     cin >> key; 
     cin >> type; 

     if(key == 0) break; 
     if(type == 'd') SendKey((WORD) key, true); 
     if(type == 'r') SendKey((WORD) key, false); 
     if(type == 'p') PressKey((WORD) key); 
    } 

    return 0; 
} 

Vielen Dank, wenn jemand etwas ähnliches gebaut hat, bitte sagen Sie mir.

+0

Sie lesen den Schlüssel nur einmal, dann überprüfen Sie, ob der Schlüssel d, r oder p .. ist. Was erwarten Sie? –

+0

Hallo, dies ist ein Kind-Prozess, also werde ich Schlüssel über Standard-Ausgabe von einem NodeJS-Prozess simulieren, das ist, warum ich eine Endlosschleife habe, möchte ich nicht den Prozess schließen –

Antwort

0

Sie müssen ein Tastenereignis für jede Tastenwiederholung senden, die Sie wollen, dies wird nicht automatisch geschehen. Genau wie der echte Tastaturtreiber nach der anfänglichen Verzögerung wiederholte Schlüsselereignisse sendet.

+0

Hallo, danke für Ihre Antwort, ich werde es tun wie es, ich werde über "natürliche" Verzögerungen der Tastatur suchen, vielen Dank –

Verwandte Themen