首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ SendInput()

C++ SendInput()
EN

Stack Overflow用户
提问于 2020-06-10 20:26:50
回答 1查看 130关注 0票数 0

我想创建一个程序,它只为我按下的每一次击键发送一个击键。我对这个程序有问题,因为即使在我停止按键之后,它仍然发送击键。

例如,如果按下“向上”,它将继续向上按,直到我按下另一个键。

你能帮我拿一下这个吗?

谢谢

代码语言:javascript
复制
int main()
{
    // This structure will be used to create the keyboard
    // input event.
    INPUT ip;

    while(1)
    {
             if (GetAsyncKeyState(VK_UP) < 0)
          {
            INPUT ip;
            ip.type = INPUT_KEYBOARD;
            ip.ki.time = 0;
            ip.ki.dwExtraInfo = 0;          
            ip.ki.wVk = 0x26; // virtual-key code for the "UP arrow" key
            ip.ki.dwFlags = 0; // 0 for key press
            SendInput(1, &ip, sizeof(INPUT));
          }

          if (GetAsyncKeyState(VK_DOWN) < 0)
          {
            INPUT ip;
            ip.type = INPUT_KEYBOARD;
            ip.ki.time = 0;
            ip.ki.dwExtraInfo = 0;          
            ip.ki.wVk = 0x28; // virtual-key code for the "UP arrow" key
            ip.ki.dwFlags = 0; // 0 for key press
            SendInput(1, &ip, sizeof(INPUT));


          }

           if (GetAsyncKeyState(VK_RIGHT) < 0)
          {
            INPUT ip;
            ip.type = INPUT_KEYBOARD;
            ip.ki.time = 0;
            ip.ki.wVk = 0;
            ip.ki.dwExtraInfo = 0;          
            ip.ki.wVk = 0x27; // virtual-key code for the "UP arrow" key
            ip.ki.dwFlags = 0; // 0 for key press
            SendInput(1, &ip, sizeof(INPUT));

          }

          if (GetAsyncKeyState(VK_LEFT) < 0)
          {
            INPUT ip;
            ip.type = INPUT_KEYBOARD;
            ip.ki.time = 0;
            ip.ki.dwExtraInfo = 0;          
            ip.ki.wVk = 0x25; // virtual-key code for the "UP arrow" key
            ip.ki.dwFlags = 0; // 0 for key press
            SendInput(1, &ip, sizeof(INPUT));


          }

    }

    // Exit normally
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-10 20:32:05

您可以保留是否第一次单击该按钮的状态。然后你只需在释放时重置它。下面是其中一个按钮的示例。

代码语言:javascript
复制
bool up_pressed = false;

int main()
{
         if (GetAsyncKeyState(VK_UP) < 0)
         {
            if (!up_pressed)
            {
                up_pressed = true;
                INPUT ip;
                ip.type = INPUT_KEYBOARD;
                ip.ki.time = 0;
                ip.ki.dwExtraInfo = 0;          
                ip.ki.wVk = 0x26; // virtual-key code for the "UP arrow" key
                ip.ki.dwFlags = 0; // 0 for key press
                SendInput(1, &ip, sizeof(INPUT));
            }
         }
         else 
         {
             up_pressed = false;
         }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62303564

复制
相关文章

相似问题

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