Winapi – 扩展键盘扫描码

Winapi – 扩展键盘扫描码,第1张

概述如果我想使用扩展扫描代码(如0xE0 0x1D(右CTRL))来模拟按键,我将如何在C中模拟这样的按键?我尝试使用两个INPUT结构调用SendInput,但只有左按CTRL键被“按下”.在具有“twin”(Shift和Alt)的其他键的情况下也会发生同样的事情. 其次,如何为“扩展”键引起键盘事件? KEYBDINPUT结构有一个KEYEVENTF_EXTENDEDKEY标志来处理0xE0字节: 如果我想使用扩展扫描代码(如0xE0 0x1D(右CTRL))来模拟按键,我将如何在C中模拟这样的按键?我尝试使用两个input结构调用sendinput,但只有左按CTRL键被“按下”.在具有“twin”(Shift和Alt)的其他键的情况下也会发生同样的事情.

其次,如何为“扩展”键引起键盘事件?

解决方法 KEYBDINPUT结构有一个KEYEVENTF_EXTENDEDKEY标志来处理0xE0字节:

If specifIEd,the scan code was preceded by a prefix byte that has the value 0xE0 (224).

尝试这样的事情:

input inputs[2];ZeroMemory(inputs,sizeof(inputs));inputs[0].type = input_KEYBOARD;inputs[0].ki.wScan = 0x1D;inputs[0].ki.DWFlags = KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY;copyMemory(&inputs[1],&inputs[0],sizeof(input));inputs[1].ki.DWFlags |= KEYEVENTF_KEYUP;sendinput(2,inputs,sizeof(input));

但是,我建议使用虚拟密钥而不是扫描代码:

input inputs[2];ZeroMemory(inputs,sizeof(inputs));inputs[0].type = input_KEYBOARD;inputs[0].ki.wVk = VK_CONTRol;inputs[0].ki.DWFlags = KEYEVENTF_EXTENDEDKEY;copyMemory(&inputs[1],如果您绝对需要扫描代码,至少要查看MapVirtualKey()以将虚拟密钥转换为扫描代码:

inputs[0].type = input_KEYBOARD;inputs[0].ki.wScan = MapVirtualKey(VK_RCONTRol,MAPVK_VK_TO_VSC);inputs[0].ki.DWFlags = KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY;
总结

以上是内存溢出为你收集整理的Winapi – 扩展键盘扫描码全部内容,希望文章能够帮你解决Winapi – 扩展键盘扫描码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存