我从WM_CHAR和WM_KEYDOWN消息中获取文本输入和按键输入
我想要做的是过滤掉WM_CHAR消息,这些消息与绑定的密钥具有相同的VK_代码,以启用您输入文本的控件。
EG:Game使用〜启用控制台,键绑定通过VK_OEM3和WM_KEYDOWN完成,但输入控制台的文本需要来自WM_CHAR的文本。
首先发生WM_KEYDOWN,激活控制台,然后将〜的WM_CHAR发送到我不想要的控制台缓冲区。
我认为防止这种情况的最佳方法是将WM_CHAR中的VK_与控件的绑定键进行比较并将其过滤掉。
有没有办法从WM_CHAR消息中获取VK_?
我读到你可以从第16-23位
获取Lparam的扫描码但我不确定如何:
答案 0 :(得分:4)
经过一番捣乱后,我设法用以下代码提取虚拟密钥:
此代码将lParam的地址作为unsigned char数组(长度为一个字节),然后使用指针算术来寻址第3个字节(位16-23):
unsigned char scancode = ((unsigned char*)&lParam)[2];
此代码从扫描码转换为虚拟键:
unsigned int virtualKey = MapVirtualKey(scancode,MAPVK_VSC_TO_VK);
答案 1 :(得分:2)
也许你会使用MapVirtualKey。
我不确定如何从lparam中提取scancode,因为文档没有说明 - 要么获得整个lparam并计算此函数知道要查看哪些位,要么使用bitfield struct并从中获取正确的位。我认为这些方法应该起作用 - 尝试两者都不应该是困难的。