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()在这种情况下使用,因为它仍然不会有效.
我正在寻找这样的解决方案.
DoSpaceKeyTask() 执行"一次".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)