GetKeyState() 是不是检测到密钥是不是被释放?

Posted

技术标签:

【中文标题】GetKeyState() 是不是检测到密钥是不是被释放?【英文标题】: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 我想知道密钥是否被释放,因为我正在为我正在开发的框架制作输入系统,我只关心我的窗口。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于GetKeyState() 是不是检测到密钥是不是被释放?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 C++ 中是不是按下了任何键?

如何检测是不是在 C++ 中按下了除特定键盘键之外的任何键盘键?

Selenium C# Webdriver如何检测元素是不是可见

DESKey 是不是保留无效的奇偶校验位?

检查密钥是不是存在于 JSON 中,然后插入到页面中

C++,怎么让程序模拟用户输入指令,并自行回车以执行该指令(不是写个输出函数只做样子)?