Обнаружение типа клавиатуры (Qwerty или Dvorak)
Этот вопрос мне задал друг, и это пробудило мое любопытство, и я пока не смог найти решение, поэтому надеюсь, что кто-то узнает.
Есть ли способ программно определить, какой тип клавиатуры использует пользователь? Насколько я понимаю, клавиатура состоит в том, что сигнал, посылаемый на компьютер для обозначения "A" на клавиатуре DVORAK, совпадает с сигналом, посылаемым на компьютер для обозначения "A" на клавиатуре QUERTY. Тем не менее, я читал о способах переключения на / с dvorak, которые выделяют настройки реестра, но я надеюсь, что есть настройки компьютера или что-то еще, что я могу запросить.
Есть идеи?
4 ответа
Вы можете сделать это, вызвав метод Win32 API GetKeyboardLayoutName(). Клавиатуры Дворжака имеют конкретные названия. Например, американский макет 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);
}
}
Вы могли бы сделать это через DirectInput или любой другой текущий DirectX-эквивалент. Я набираю на клавиатуре Dvorak, и около 50% игр, которые я покупаю, обнаруживают мою клавиатуру и реконфигурируют раскладки клавиш по умолчанию для ее поддержки (например, используя aoe вместо wasd)
И да, как отметил Брайан, "А" одинаково на обеих клавиатурах.
Это, вероятно, зависит от ОС. Я уверен, что где-то есть настройка операционной системы, которая регистрирует национальность клавиатуры. (Дворжак считается национальностью, потому что французские клавиатуры отличаются от американских, клавиатуры отличаются от...)
Кроме того, примечание: "A" был плохим примером, поскольку "A" - это один и тот же ключ в dvorak и qwerty... B-)
Почему это имеет значение? В зависимости от какой-то особой реализации клавиатуры это не очень хорошая идея. Мы используем сканеры штрих-кода повсюду, которые эмулируют ввод с клавиатуры. Что бы ваша программа сделала с этими устройствами?:)
PS: упомянутая запись реестра размещает клавиши обычной клавиатуры в раскладку дворака.