wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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
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的扫描代码,请@L_945_2@mapVirtualKeyEx(vkCode,0);

然后,只需使用刚刚获得的信息进行按键模拟即可.

大佬总结

以上是大佬教程为你收集整理的windows – SendInput()和非英文字符和键盘布局全部内容,希望文章能够帮你解决windows – SendInput()和非英文字符和键盘布局所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。