我需要为我的小应用程序监听键盘按键状态。
#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()
,因为它仍然无效。
我正在寻找这样的解决方案。
- 我按空格键。
DoSpaceKeyTask()
执行“一次”。- 我按其他键。
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/