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

时间:2013-03-15 21:49:43

标签: c# 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方法发送这些字母?

2 个答案:

答案 0 :(得分:4)

您可以使用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签名可以在我的其他answer中找到。)

答案 1 :(得分:0)

自己找到解决方案:

Oem3 =ö,Oem7 =ä,Oem6 =å