C# 如何使用SendInput发送斯堪的纳维亚信件
我正在尝试创建一个虚拟键盘,它使用SendInput方法模拟键盘,如下所示:C# 如何使用SendInput发送斯堪的纳维亚信件,c#,sendinput,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;
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));
}
但我在钥匙计数中找不到斯堪的纳维亚字母Ä、Ö和Å。如何使用SendInput方法发送这些信件?我自己找到了解决方案:
Oem3=ö,Oem7=ä,Oem6=å我自己找到了解决方案:
Oem3=ö、Oem7=ä、Oem6=å您可以使用
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
等解决方案更具可移植性,Oem3等解决方案的指定字符会根据应用程序执行平台的文化而有所不同
(其余的p/Invoke签名可以在my other中找到。)您可以使用
KEYEVENTF\u 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
等解决方案更具可移植性,Oem3等解决方案的指定字符会根据应用程序执行平台的文化而有所不同
(其余的p/Invoke签名可以在我的其他签名中找到。)你是一名计算机程序员:编写一个程序来回答你的问题。编写一个表单来处理KeyDown事件并显示KeyEventArgs.KeyCode属性,按下键,看看会发生什么。耶!我怎么没想到呢!?!谢谢!:)正确的答案是:Oem3=ö,Oem7=ä,Oem6=å现在,记住,只有当你的客户拥有与你相同的键盘时,这些代码才有效。“OEM”指“原始设备制造商”;键盘制造商可以决定键绑定是什么。你是一名计算机程序员:编写一个程序来回答你的问题。编写一个表单来处理KeyDown事件并显示KeyEventArgs.KeyCode属性,按下键,看看会发生什么。耶!我怎么没想到呢!?!谢谢!:)正确的答案是:Oem3=ö,Oem7=ä,Oem6=å现在,记住,只有当你的客户拥有与你相同的键盘时,这些代码才有效。“OEM”指“原始设备制造商”;键盘制造商可以决定键绑定是什么。请注意,当使用
KEYEVENTF\u UNICODE
时,wScan
是一个UTF-16编码单元。如果要发送需要UTF-16代理项对的Unicode码点(o
不需要),则必须发送两个事件,一个事件对应于该对的每个代码单元。请注意,在使用KEYEVENTF\u Unicode
时,wScan
是UTF-16代码单元。如果要发送需要UTF-16代理项对的Unicode码点(ö
不需要),则必须发送两个事件,该对的每个码单元一个事件。