2009-05-15 2 views
5

Мне задали этот вопрос у друга, и это вызвало мое любопытство, и пока я не смог найти решение, поэтому я надеюсь, что кто-то узнает.Определение клавиатуры (Qwerty или Dvorak)

Есть ли способ программно определить, какой тип клавиатуры используется пользователем? Мое понимание клавиатуры заключается в том, что сигнал, отправленный на компьютер для «A» на клавиатуре DVORAK, совпадает с сигналом, посылаемым на компьютер для «A» в QUERTY-клавиатуре. Тем не менее, я читал о способах для switch to/from dvorak, которые подчеркивают настройку реестра, но я надеюсь, что есть машинный параметр или какая-то другая вещь, которую я могу запросить.

Любые идеи?

+0

Из любопытства, есть причина, почему вы хотите знать? Я не могу думать ни о чем другом, как о случайной статистике. –

+1

@Nathan: Я не советник, но для игры вы можете сопоставить WASD с клавишами движения. Отлично работает в QWERTY, не так хорошо в Дворжаке. – Powerlord

+1

Я изучаю программу для планшетного ПК и показываю виртуальную клавиатуру для быстрого ввода, чтобы люди не открывали окно. Я пытаюсь сопоставить клавиатуру с ПК, и мой друг отметил, что мне, возможно, придется рассмотреть DVORAK vs QWERTY. Спасибо всем за ответы. –

ответ

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

    } 
    } 
+0

Спасибо за ответ. Я думаю, что смогу обрабатывать иностранные клавиатуры, если я даже начну думать о расширении интернационализации моего приложения. –

1

Для чего это имеет значение? В зависимости от какой-то специальной реализации клавиатура вообще не является хорошей идеей. Мы используем сканеры штрих-кодов по всему месту, которые эмулируют ввод клавиатуры. Что бы ваша программа сделала с этими устройствами? :)

PS: указанная запись в реестре устраивает ключи обычной клавиатуры в макет dvorak.

+2

Как вы пришли к предположению, что он хочет зависеть от макета ключа? Это похоже на то, что он хочет поддерживать альтернативные макеты клавиш. См. Ответ Арика по многим причинам, почему кто-то это сделает. – dss539

3

, возможно, зависит от ОС. Я уверен, что где-то есть настройка операционной системы, которая регистрирует национальность клавиатуры. (Dvorak считается национальностью, потому что французские клавиатуры отличаются от американских клавиатур, отличные от ...)

Кроме того, только боковое примечание: «A» был плохим примером, поскольку «A» - это тот же ключ в dvorak и qwerty ... B-)

+0

Значит, нет языковых версий дворакской клавиатуры? Просто любопытно .. – VVS

+0

Не то, чтобы я знал. Интересный вопрос. –

3

Возможно, вы сможете сделать это через DirectInput или независимо от текущего эквивалента DirectX. Я печатаю на клавиатуре Dvorak, и около 50% игр, которые я покупаю, обнаруживают свою клавиатуру и перенастраивают стандартные сопоставления по умолчанию для поддержки (например, aoe вместо wasd)

И да, как сказал Брайан, «A» одинаково на обеих клавиатурах.

+1

Еще один комментарий: Клавиатуры на Windows различаются в зависимости от процесса. У вас может быть одно окно, установленное на QWERTY, а другое - на арабскую клавиатуру. Фактически, за тринадцать лет ввода на Dvorak мне еще предстоит найти способ глобально изменить раскладку клавиатуры. –

+0

Aric: ДА! факт, что я нахожу невероятно раздражающим! –

+0

Я нахожу этот факт особенно полезным. Я выполняю большую часть своей работы с низкой клавиатурой (серфинг в сети, игры) на QWERTY, когда я общаюсь на Дворжаке. – CookieOfFortune

Смежные вопросы