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++ 中按下了除特定键盘键之外的任何键盘键?