【问题标题】:Does GetKeyState() detect if the key is being released?GetKeyState() 是否检测到密钥是否被释放?
【发布时间】:2021-11-12 05:17:37
【问题描述】:

有没有办法检测是否使用GetKeyState() 释放了密钥?我读过它,它只有 2 个状态,切换 0x8000 和按下 0x01

我想要这样的东西:

short Input(int Key, int Mode)
{
   if (Mode == KEY_RELEASE)
      if (GetKeyState(Key) & KEY_PRESS)
         //Wait for the key to be released
      else
         return GetKeyState(Key) & KEY_PRESS;
}

【问题讨论】:

  • 没有。使用此函数检测键release 的唯一方法是缓存键值。如果您上次检查时按下了键,而现在没有按下,则它已被释放。考虑研究处理输入的其他方式。
  • 你想解决什么问题?
  • @IInspectable 我正在尝试使用 GetKeyState 函数检测密钥释放,但它没有释放状态。
  • 他的意思是在大局中,为什么您需要知道何时释放了密钥?你只关心你自己的窗口还是系统上的所有进程等等?
  • @Anders 我想知道密钥是否被释放,因为我正在为我正在开发的框架制作输入系统,我只关心我的窗口。

标签: c++ windows winapi input keyboard


【解决方案1】:

GetKeyState 返回有关当前输入队列(您的线程和附加线程)的键状态的信息。您可以使用GetKeyboardState 获取所有密钥的类似信息。

这两个函数应该只用于响应某些事件,你不应该一遍又一遍地轮询来检测变化。

在您控制的窗口中检测键盘更改的最佳方法是处理 WM_KEYDOWN/UP 和 WM_CHAR 消息。

最坏的情况,使用SetWindowsHookEx 捕获键盘事件或窗口消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多