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

Ari*_*ona 3 c++ keyboard winapi 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;
}
Run Code Online (Sandbox Code Playgroud)

从键盘上单击某些键后,这些功能必须运行一次.它们只是我的应用程序的一些小任务,这与本主题无关.

我的问题是,当我按下一个键时,由于while(1)在按键期间循环几次,它几次执行这些功能.我不能Sleep()在这种情况下使用,因为它仍然不会有效.

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

  1. 我按SPACE键.
  2. DoSpaceKeyTask() 执行"一次".
  3. 我按OTHER键.
  4. DoOtherKeyTask() 执行"一次".

我喜欢我将要使用的5个键.这个案子有人能帮帮我吗?

PS.如果GetKeyState()功能对此任务无用,请随时向您推荐.我的函数知识在C++上非常有限.

小智 5

由于按钮按下的持续时间,您的功能会被多次调用.该系统非常敏感.所以这是一种解决方法.

你可以做这样的事情(设置一个标志,当按键关闭时分配一个值,然后在按键启动时重新设置它).

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
}
Run Code Online (Sandbox Code Playgroud)