如何使用SendInput发送斯堪的纳维亚字母

我正在尝试创建一个虚拟键盘,它使用SendInput方法模拟键盘,如下所示:

public static void SendKeyDown(System.Windows.Forms.Keys key) { INPUT k = new INPUT(); k.type = (int)InputType.INPUT_KEYBOARD; k.ki.wVk = (short)key; k.ki.dwFlags = (int)KEYEVENTF.KEYDOWN; k.ki.dwExtraInfo = GetMessageExtraInfo(); SendInput(1, new INPUT[] { k }, Marshal.SizeOf(k)); } 

但我无法从Keys -enumeration中找到斯堪的纳维亚字母Ä,Ö和Å。 如何使用SendInput方法发送这些字母?

您可以使用KEYEVENTF_UNICODE发送Unicode字符。

 k.type = (int)InputType.INPUT_KEYBOARD; k.ki.wScan = 'ö'; k.ki.wVk = 0; k.ki.dwFlags = (int)KEYEVENTF.UNICODE | (int)KEYEVENTF.KEYDOWN; k.ki.dwExtraInfo = GetMessageExtraInfo(); 

这比使用Oem3等的解决方案更便携,其分配的字符将根据应用程序执行平台的文化而变化。

(其他P / Invoke签名可以在我的其他答案中找到。)

自己找到解决方案

Oem3 =ö,Oem7 =ä,Oem6 =å