C++:GetKeyState() 必须运行一次

标签 c++ winapi keyboard keypress

我需要为我的小应用程序监听键盘按键状态。

#include <windows.h>
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    while(1)
    {
        if(GetKeyState(VK_SPACE) & 0x80)
        {
            cout << "Space pressed.\r\n";
            DoSpaceKeyTask();
        }

        if(GetKeyState(OTHER_KEY) & 0x80)
        {
            cout << "Other key pressed.\r\n";
            DoOtherKeyTask();
        }
    }
    return 0;
}

一旦我点击键盘上的某些键,这些函数就必须运行一次。它们只是我的应用程序的一些小任务,与本主题无关。

我的问题是,当我按下一个键时,它执行了几次函数,因为 while(1) 在按键过程中循环了几次。在这种情况下我不能使用 Sleep(),因为它仍然无效。

我正在寻找这样的解决方案。

  1. 我按空格键。
  2. DoSpaceKeyTask() 执行“一次”。
  3. 我按其他键。
  4. DoOtherKeyTask() 执行“一次”。

我有 5 把 key 要用到。谁能帮我解决这个问题?

附言。如果 GetKeyState() 函数对此任务没有用,请随时提出您的建议。我对 C++ 的函数知识非常有限。

最佳答案

由于按钮持续按下的持续时间,您的函数被多次调用。该系统非常敏感。所以这是一个解决方法。

你可以做这样的事情(设置一个标志,当按键按下时分配一个值,然后在按键弹起时重新分配)。

int k=0;//Flag
while(1){
    //check if the key was pressed (key_down)
    if((GetAsyncKeyState('0') & 0x8000) && (k == 0)){k=1; cout<<"'0' PRESSED."<<k<<endl;}//do your stuff here
    //check if the key was released (key up)
    else if(GetAsyncKeyState('0') == 0) k = 0;//reset the flag
}

关于C++:GetKeyState() 必须运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790502/

相关文章:

c++ - 使用 IDebugControl::Disassemble 查看子程序的指令

c# - 在 .NET 进程中观看本地进程创建的全局事件

Android Studio - ScrollView 在键盘打开时移出屏幕

c++ - 是否可以将矩阵与初始化列表相乘?

c++ - 如何覆盖 Windows 键盘快捷键?

ios - 快速观察者不起作用

ios - 通过触摸外部关闭 iOS 键盘(更聪明的方式)

c++ - 为什么 C++ 编译需要这么长时间?

c++ - 我是否需要在描述文件中为使用它的 R 包导入 RccpEigen,或者 "LinkingTo"就足够了吗?

C++ 我刚刚读到 float 不精确并且不存储精确的整数值。这是什么意思?