2

我正在尝试创建一个虚拟键盘,它使用 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 枚举中找到斯堪的纳维亚字母 Ä、Ö 和 Å。如何使用 SendInput 方法发送这些信件?

4

2 回答 2

4

您可以使用 发送 Unicode 字符KEYEVENTF_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();

这比您使用Oem3et al 的解决方案更便携,其分配的字符会根据您的应用程序正在执行的平台的文化而有所不同。

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

于 2013-03-15T22:13:02.403 回答
0

自己找到解决方案:

Oem3 = ö, Oem7 = ä, Oem6 = å

于 2013-03-15T22:04:35.937 回答