键盘类型(Qwerty或Dvorak)检测

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

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

有任何想法吗?

您可以通过调用GetKeyboardLayoutName()Win32 API方法来完成此操作。 Dvorak键盘有特定的名称。 例如,US 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); } } 

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

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

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

是的,正如Brian所说,两个键盘上的’A’是相同的。

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

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