windows – SendInput()和非英文字符和键盘布局
在
Windows中使用非英语输入键盘语言时,我无法模拟字符按键.
我尝试使用KEYEVENTF_UNICODE调用SendInput(): KEYBDINPUT ki; INPUT input; int character = 0; ki.wVk = 0; ki.wScan = character; ki.dwFlags = KEYEVENTF_UNICODE; ki.time = 0; ki.dwExtraInfo = 0; input.type = INPUT_KEYBOARD; input.ki = ki; SendInput(1,&input,sizeof(INPUT)); 这实际上是有效的(当然,在我的代码中,我也在键下来之后做一个KEYUP)…除了在GTK应用程序中(可能还有其他实例,它也不起作用). 根据MSDN,如果指定了KEYEVENTF_UNICODE,则SendInput将WM_KEYDOWN或WM_KEYUP消息发送到前台线程的消息队列,其中wParam等于VK_PACKET. GetMessage或PeekMessage获取此消息后,将消息传递给TranslateMessage会发布带有最初由wScan指定的Unicode字符的WM_CHAR消息.如果将此Unicode字符发布到ANSI窗口,则会自动将其转换为相应的ANSI值. 所以我相信当传递KEYEVENTF_UNICODE时,SendInput()的功能是不同的……不像通常那样低级. 对于我的生活,我无法想出任何其他方法来让SendInput()正确打印出用户键盘语言的字符.例如,如果键盘输入语言是“瑞典语”,我不能让它输出’@'(相反,它打印出一个引号),我不能让它输出非正确的ASCII字符,要么(重音字母等). 提前致谢. 解决方法
我发现执行此操作的正确方法是通过使用字符调用VkKeyScanEx()来获取字符的虚拟键代码.返回值的高位字节将告诉您需要“按下”哪些修改键:Control,Alt和/或Shift;低位字节是实际的虚拟键代码.
要获取VK的扫描代码,请调用MapVirtualKeyEx(vkCode,0); 然后,只需使用刚刚获得的信息进行按键模拟即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-phone-8 – Windows Phone 8.1应用程序无法在模拟器
- windows – 将文件拖放到Visual Studio中不起作用
- 如何在Windows 7 64位上安装ROracle
- Wix自定义动作DLL依赖于执行时安装的文件
- windows – 将Node.js-Scripts node.exe打包成单个可执行文
- 命令行 – 在Windows 7中使用命令提示符的消息
- windows系统上安装mysql操作过程及常见错误处理
- 如何获取Windows批处理的父文件夹
- 使用Windows API在c中异步操作:使用哪种方法以及为什么我的
- 如何在Windows 10上使用64位mongodb进行流星工作?