按下特定键时快速按下此键。如何防止触发键被按下? (c++)

Quickly press this key when a specific key is pressed. How prevent the trigger key to be pressed? (c++)

如果标题不清楚,我很抱歉..但是我不知道如何把事情写得更短:c 如果按下/发送键 'U',下面的(提取)代码应该快速按下/发送键 'A'。但是,如果我按 'U',它会先发送 'U',然后再发送几个 'A'。我怎样才能做到根本不发送密钥 'U'?我尝试了不同的方法,但无法正常工作...我认为问题出在 if-condition :/

INPUT ip; // Structure for creating keyboard-events
ip.type = INPUT_KEYBOARD; // Create a generic keyboard-event
ip.ki.wScan = 0;       // Hardware-Scan-Code for the key
ip.ki.time = 0;        //
ip.ki.dwExtraInfo = 0; //

for (;;) {
    sleep_for(milliseconds(1)); // Sleep in each iteration so the CPU / RAM have a relaxed life
    if (GetAsyncKeyState(0x55)) {   // If key 'U' is pressed
        ip.ki.wVk = 0x41;                 // Press key 'A'
        ip.ki.dwFlags = 0;                //
        SendInput(1, &ip, sizeof(INPUT)); //

        ip.ki.dwFlags = KEYEVENTF_KEYUP;    // Release key that was pressed
        SendInput(1, &ip, sizeof(INPUT));   //
    }
}

您正在循环调用 GetAsyncKeyState()。 If 检测键是否被按下。它在按下该键期间多次调用该函数。当您按下一个键时,它通常持续 5-25 毫秒,因此 GetASyncKeyState() 多次检测到按键按下。

GetASyncKeyState() returns 一个短整数,如果设置了最低有效位,则在之前调用 GetASyncKeyState() 时已经检测到密钥

要修复您的代码,只需使用按位运算符 AND

检查此位
if (GetAsyncKeyState(0x55) &1)

这在切换布尔值或特征时也很有用。