C# - 获取用户键盘类型(QWERTY / AZERTY)

时间:2013-10-17 19:23:29

标签: c# keyboard keyboard-layout qwerty

我在2天内尝试在C#中获取用户的键盘类型(QWERTY或AZERTY)。 我想过用CultureInfo(本地化)来做这件事,但这绝对不是一个很好的解决方法。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用GetKeyboardLayout方法;

 public class Program
   {
     const int KL_NAMELENGTH = 9;

     [DllImport("user32.dll")]
     private static extern long GetKeyboardLayoutName(
           System.Text.StringBuilder pwszKLID); 

     static void Main(string[] args)
     {
       StringBuilder name = new StringBuilder(KL_NAMELENGTH);

       GetKeyboardLayoutName(name);

       Console.WriteLine(name);

     }
   }

源; Keyboard Type (Qwerty or Dvorak) detection

MSDN; http://msdn.microsoft.com/en-us/library/windows/desktop/ms646298(v=vs.85).aspx

答案 1 :(得分:0)

我知道这是一个老问题,但所选择的答案并没有完全给我信息,无论是 QWERTY 还是 AZERTY。相反,它会给你键盘标识符*

然而,在摆弄虚拟键和 DirectInput 扫描码之后,这就是我想出的:

Console.WriteLine(KeyboardLayoutUtils.GetCurrentKeyboardLayoutAsString());
// outputs: QWERTY OR AZERTY depending on the active input language

所以简单地调用上面的:

{{1}}

会给你“QWERTY”或“AZERTY”,或者实际上是 qwerty 位置上的 6 个字符。

*作为额外的参考,虽然不完全适用于 C#,但此页面列出了键盘标识符:windows-language-pack-default-values