首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当特定的键被按下时,快速按下此键。如何防止触发键被按下?(c++)

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

Stack Overflow用户
提问于 2020-06-22 00:19:49
回答 1查看 52关注 0票数 0

如果标题不清楚,我很抱歉..但是我不知道怎么说得更短:c下面的(提取)代码应该是在按下/发送'U‘键的情况下快速按/发送键'A’的。但是如果我按“U”,它将首先发送“U”,然后紧接着发送几个“A”。我如何才能使密钥'U‘根本不被发送?我尝试了不同的方法,但我不能让它工作…我认为问题出在if条件中:/

代码语言:javascript
复制
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));   //
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 09:31:36

您正在循环中调用GetAsyncKeyState()。如果检测按键是否被按下。在按键期间,它会多次调用函数。当你按一个键的时候,通常是5-25毫秒,所以GetASyncKeyState()会检测到多次按键。

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

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

代码语言:javascript
复制
if (GetAsyncKeyState(0x55) &1)

这在切换布尔值或功能时也很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62501294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档