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)); } 

感谢大家的帮助。