如何测量按键持续时间 C++

问题描述 投票:0回答:1

嗨,我正在用 C++ 创建一个用于游戏分析的小程序(这是一种爱好,我不知道自己在做什么,所以请不要对我抱太大期望),它可以做三件事。

  1. 识别并计算按下的键(释放后增加按下一个键的次数)
  2. 测量某个键的按下持续时间的总和(为此已经制作了一个计时器类)
  3. 像这样将所有内容输出到.txt文件中:

字母:A Times_pressed:14 持续时间:10000ms

到目前为止,这是我的代码,我从计算次数开始,但我无法弄清楚它是如何工作的。当按下“A”键时它增加得非常快,当释放时它停止。这不是我真正想要的。我只想要 +1 的增量,即使我持有它很长时间但在释放时重复下一个 +1 的增量。 任何建议或帮助将不胜感激!

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

int main()
{
    int aKeyCount{0};
    while (true)
    {
        if (GetAsyncKeyState('A') & 0x8000)
        {
           ++aKeyCount;
           std::cout << aKeyCount << std::endl;
        }
    }
    return 0;
}

c++ winapi count key duration
1个回答
0
投票

之所以在按下“A”键时代码递增得非常快,是因为只要按住该键,GetAsyncKeyState() 就会返回值 1。换句话说,您的代码在循环中每次按下键时都在计数,每秒多次。

添加了一个布尔标志以跟踪之前是否按下了“A”键。

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

int main()
{
    int aKeyCount{0};
    bool wasKeyPressed{false};
    
    while (true)
    {
        if (GetAsyncKeyState('A') & 0x8000)
        {
            if (!wasKeyPressed)
            {
                ++aKeyCount;
                std::cout << aKeyCount << std::endl;
            }
            wasKeyPressed = true;
        }
        else
        {
            wasKeyPressed = false;
        }
    }
    
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.