Csharp/C#教程:VkKeyScanEx / Sendinput替代unicode?分享


VkKeyScanEx / Sendinput替代unicode?

我正在尝试发送一个角色。 因此,我使用位于user32.dll中的本机方法GetKeyboardLayout和VkKeyScanExW来获取系统当前键盘布局的虚拟键代码(以及shift和control-state)。 然后,我使用user32.dll的本机方法SendInput将此虚拟键码发送到应用程序。

一切都很好 – 除了欧元符号。 当我将此字符作为参数传递给VkKeyScanExW时,它返回-1,这意味着找不到。 在我的键盘上使用Ctrl + Menu + E(德语布局)定位

现在我假设这是因为欧元符号是unicode符号而不是映射在ascii-layout中。 我读Sendinput也允许使用硬件扫描码的unicode模式。 所以我希望使用SendInput的unicode模式来解决我的问题。 但我想我的虚拟代码不是硬件扫描代码,因为unicode范围更宽。 我在哪里可以找到如何通过SendInput将unicode字符(例如€)发送到另一个控件/窗口的示例。 MSDN和pinvoke.net不提供有用的示例。

与此同时,我使用SendInput的unicode参数解决了这个问题。 现在我不再需要使用VkKeyScan了 – 我可以传递角色本身。

 private static void SendUnicodeChar(char input) { var inputStruct = new NativeWinApi.Input(); inputStruct.type = NativeWinApi.INPUT_KEYBOARD; inputStruct.ki.wVk = 0; inputStruct.ki.wScan = input; inputStruct.ki.time = 0; var flags = NativeWinApi.KEYEVENTF_UNICODE; inputStruct.ki.dwFlags = flags; inputStruct.ki.dwExtraInfo = NativeWinApi.GetMessageExtraInfo(); NativeWinApi.Input[] ip = { inputStruct }; NativeWinApi.SendInput(1, ip, Marshal.SizeOf(inputStruct)); } 

感谢大家的帮助。

上述就是C#学习教程:VkKeyScanEx / Sendinput替代unicode?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1044045.html

(0)
上一篇 2022年2月2日
下一篇 2022年2月2日

精彩推荐