Spe*_*ose 4 c++ keyboard winapi
我从 WM_CHAR 和 WM_KEYDOWN 消息获取文本输入和按键输入
我想要做的是过滤掉与绑定以启用您输入文本的控件的键具有相同 VK_ 代码的 WM_CHAR 消息。
EG:游戏使用~来启用控制台,按键绑定是通过VK_OEM3和WM_KEYDOWN完成的,但是输入到控制台的文本需要来自WM_CHAR的文本。
由于 WM_KEYDOWN 首先发生,控制台被激活,然后 ~ 的 WM_CHAR 被发送到我不想要的控制台缓冲区。
我认为防止这种情况的最佳方法是将 WM_CHAR 中的 VK_ 与控件的绑定键进行比较并将其过滤掉。
有没有办法从 WM_CHAR 消息中获取 VK_ ?
我读到您可以从 Lparam 的第 16-23 位获取扫描码
但我不确定如何:
经过一番折腾后,我设法使用以下代码提取虚拟密钥:
此代码获取 lParam 的地址作为无符号字符数组(一个字节长度),然后使用指针算术来寻址第三个字节(位 16-23):
unsigned char scancode = ((unsigned char*)&lParam)[2];
Run Code Online (Sandbox Code Playgroud)
此代码从扫描码转换为虚拟键:
unsigned int virtualKey = MapVirtualKey(scancode,MAPVK_VSC_TO_VK);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3241 次 |
| 最近记录: |