键盘类型(Qwerty或Dvorak)检测

时间:2009-05-15 16:16:30

标签: c#

我被一位朋友问过这个问题,它引起了我的好奇心,我一直无法找到解决方案,所以我希望有人知道。

有没有办法以编程方式检测用户使用的键盘类型?我对键盘的理解是,在DVORAK键盘上发送到计算机的'A'信号与发送到计算机上用于QUERTY键盘中'A'的信号相同。但是,我已经阅读了switch to/from dvorak的方法,突出了注册表调整,但我希望有一个机器设置或其他一些我可以查询。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

可能取决于操作系统。我确信某处有一个操作系统设置可以记录键盘的国籍。 (德沃夏克被认为是国籍,因为法国键盘不同于美国键盘不同于......)

另外,只是旁注:'A'是一个不好的例子,因为'A'恰好是dvorak和qwerty中的相同键... B - )

答案 1 :(得分:3)

您可以通过DirectInput或任何当前的DirectX等效项来实现。我在Dvorak键盘上键入,我购买的游戏中约有50%检测到我的键盘并重新配置默认键映射以支持它(例如,使用aoe而不是wasd)

是的,正如Brian所说,'A'在两个键盘上都是一样的。

答案 2 :(得分:3)

您可以通过调用GetKeyboardLayoutName()Win32 API方法来完成此操作。 Dvorak键盘有特定的名称。例如,美国Dvorak布局的名称为00010409。

代码段:

  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);

    }
  }

答案 3 :(得分:1)

为什么重要?根据键盘的一些特殊实现,根本不是一个好主意。我们在模拟键盘输入的地方使用条形码扫描仪。你的程序会对这些设备做些什么? :)

PS:提到的注册表项将常规键盘的键排列为dvorak布局。