按下特定键时快速按此键.如何防止按下扳机键?(C++)

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

本文关键字:扳机 C++ 何防止      更新时间:2023-10-16

如果标题不清楚,我很抱歉.. buuut 我不知道如何把事情缩短:c 如果按下/发送键"U",下面的(提取(代码应该快速按下/发送键"A"。但是如果我按"U",它将首先发送"U",然后是几个"A"。如何使密钥"U"根本不发送?我尝试过不同的东西,但我无法让它工作......我认为问题出在 if 条件中:/

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((。 如果检测到是否按下了该键。 在按下该键期间,它会多次调用该函数。 当您按下某个键时,它通常是 5-25 毫秒,因此 GetASyncKeyState(( 会多次检测按键。

GetASyncKeyState((返回一个短整数,如果设置了最低有效位,则在之前对 GetASyncKeyState(( 的调用中已经检测到该键

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

if (GetAsyncKeyState(0x55) &1)

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