求VkKeyScanExA支持的全部TCHAR按键输入参数列表用于动态按键模拟
核心说明
VkKeyScanExA不存在你需要的全按键字符串参数列表,这是由它的设计定位决定的:它的入参本质是ANSI编码的字符值,作用是将「当前键盘布局下可直接输入输出的可见字符/标准控制字符」转换为对应的虚拟键码+修饰键状态,天生不支持区分主键盘数字和小键盘数字——因为两者输入后输出的字符都是'4',在字符层面没有任何差异,所以VkKeyScanExA不可能通过传入不同的字符串来区分这两个按键。
可行解决方案
- 方案1:完全自行维护按键名到虚拟键码的映射表
直接参考Virtual-Key Codes列表,在Java侧预定义所有按键的字符串标识和对应虚拟键码的映射关系,比如约定:- 主键盘4对应字符串
"4",映射值0x34 - 小键盘4对应字符串
"NUMPAD4",映射值0x64
映射表直接传入DLL层使用,不需要经过VkKeyScanExA转换,直接传给SendInput即可,这个方案兼容性最好,不受系统键盘布局影响。
- 主键盘4对应字符串
- 方案2:混合逻辑适配
如果需要兼容不同键盘布局下的可打印字符转换,可保留VkKeyScanExA处理常规可打印字符的逻辑,单独对非可打印的特殊按键(小键盘、功能键、方向键等)做分支判断:遇到约定的特殊按键名直接返回对应虚拟键码,不走VkKeyScanExA转换流程。
补充注意事项
如果模拟小键盘按键时出现识别异常,可以在填充INPUT结构体时额外设置ki.wScan字段为对应按键的硬件扫描码,确保按键事件可以被正确识别。
内容的提问来源于stack exchange,提问作者Devorious
相关产品推荐
相关产品推荐

