C# 如何检测键盘布局?
有没有办法通过编程检测用户使用的键盘布局C# 如何检测键盘布局?,c#,C#,有没有办法通过编程检测用户使用的键盘布局 例如,如果用户正在使用QWERTY布局,则应显示一个消息框,表明用户正在使用QWERTY键盘,与AZERTY、QWERTZ等相同。。。我不知道从何处开始以及如何完成这一点。根据该问题的答案,我得出以下结论: public partial class Form1 : Form { const int KL_NAMELENGTH = 9; [DllImport("user32.dll")] private static extern
例如,如果用户正在使用QWERTY布局,则应显示一个消息框,表明用户正在使用QWERTY键盘,与AZERTY、QWERTZ等相同。。。我不知道从何处开始以及如何完成这一点。根据该问题的答案,我得出以下结论:
public partial class Form1 : Form
{
const int KL_NAMELENGTH = 9;
[DllImport("user32.dll")]
private static extern long GetKeyboardLayoutName(
System.Text.StringBuilder pwszKLID);
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder name = new StringBuilder(KL_NAMELENGTH);
GetKeyboardLayoutName(name);
String KeyBoardLayout = name.ToString();
if (KeyBoardLayout == "00000407" || KeyBoardLayout == "00000807")
{
MessageBox.Show("Using QWERTZ");
}
else if (KeyBoardLayout == "0000040c" || KeyBoardLayout == "0000080c")
{
MessageBox.Show("Using AZERTY");
}
else if (KeyBoardLayout == "00010409")
{
MessageBox.Show("Using Dvorak");
}
else
{
MessageBox.Show("Using QWERTY");
}
}
}
键盘区域设置ID取自此处:我认为有一种简单的方法可以获得“AZERTY”或“QWERTY”形式的布局,但显然没有。。。但是,您可以通过从密钥的扫描代码中请求密钥的名称来进行欺骗。此代码返回“AZERTY”、“QWERTY”或“QWERTZ”,具体取决于当前布局:
private static string GetKeyboardLayout()
{
var layout = new StringBuilder();
var buffer = new StringBuilder(64);
for (int i = 0; i < 6; i++)
{
int scanCode = 0x10 + i;
int lParam = scanCode << 16;
GetKeyNameText(lParam, buffer, buffer.Capacity);
layout.Append(buffer.ToString());
}
return layout.ToString();
}
[DllImport("user32.dll")]
private static extern int GetKeyNameText(int lParam, StringBuilder lpString, int cchSize);
private静态字符串GetKeyboardLayout()
{
var layout=新的StringBuilder();
var buffer=新的StringBuilder(64);
对于(int i=0;i<6;i++)
{
int扫描码=0x10+i;
int lParam=scanCode您是否尝试过使用中的信息?似乎它可以扩展到您的用途。或者,这是:为什么您试图用一个消息框告诉用户一些信息,用户只需看一下键盘就可以轻松了解自己的情况?不是为了这个用途,消息框只是一个示例。这是用于键映射的。