我试图得到的关键输入,只有当它是按下,就像不是,如果我们按下它。
我希望它停止输入,直到它再次“释放”和“按下”,但我无法做到。
我的代码:
while(isRunning)
{
if(GetKeyState('K') & 0x8000)
{
std::cout << "K is Pressed" << std::endl;
}
}按下时的输出:
K压 K压 K压 K压 K压 K压 K压 K压 K压 K压
但我想要的是
K压
当我再次“发布”和“按”它时,我希望它再次打印出来。
发布于 2021-05-09 16:30:53
如果只想通知状态更改,则不应该在循环中调用GetKeyState。相反,您应该响应WM_KEYDOWN和WM_KEYUP消息。
但是,在Windows控制台应用程序中,您不能处理控制台窗口的窗口消息,因为应用程序不拥有该窗口。因此,您必须使用ReadConsoleInput并处理KEY_EVENT_RECORD事件。有关为什么无法为控制台应用程序创建标准窗口消息循环的更多信息,请参见这条线。
发布于 2021-05-09 16:45:20
我不知道您使用的是什么库,但是获取键按下的思想是创建一个类型为bool的数组,如bool lastKeys[256];,并记录最后一个帧中按下的所有键,每次按下键或每个帧时都需要更新它……然后,当您想按下键时,您需要询问if (GetKeyState('k') && !lastKeys['k'])库是否有此特性--这可能是幕后的操作方式。尽量让它更有效率。
https://stackoverflow.com/questions/67459957
复制相似问题