gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:05:07 26 4
gpt4 key购买 nike

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

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com