Эта публикация пытается прояснить некоторые проблемы в документации, касающейся клавиатуры, так как есть много путаницы в этих вещах, и нет необходимости усугублять это непонятными терминами. Будущие посты будут строиться на ней, поэтому, если вы уже знаете о клавиатурах, вы могли бы её пропустить (хотя я бы не советовал это делать). Это не настоящий словарик, поскольку он не упорядочен по алфавиту; порядок - произволен; я добавлял термин, либо когда я думал о нём, чтобы добавить его, либо когда я думал, что может быть увеличен драматический эффект.
- LCID - идентификатор локали (locale identifier). Обычно произносится как "эл-сид". Это значение, вообще-то, совсем не имеет никакого отношения к клавиатурам, но некоторые люди, кажется, думают, что это не так. На самом деле, эти люди думают о LANGID, другой записи в нашем словарике. LCID имеют размер 32 бита - это полный отстой, о причинах которого я скажу как-нибудь в другой раз, но, в любом случае, это в два раза больше, чем нужно для клавиатуры.
- LANGID - идентификатор языка (language identifier). Обычно не произносится как "лан-гид", вместо этого предпочтительно использовать "ланг-ай-ди". Это младшее слово DWORD-а, представляющего LCID, которое содержит число, являющееся уникальной комбинацией языка/региона/алфавита (language/region/script). Эта комбинация - то, что нужно для клавиатур, которые являются основными способами ввода для таких комбинаций. Очевидно, что заглядывая в будущее, в мир кастомизированных культур и локалей, это уже не будет выглядеть как удачное решение, но сейчас уже слишком поздно что-то менять...
- Layout ID - идентификатор раскладки (layout identifier). Он не имеет специального произношения - вероятно потому, что называть что-то "лид" - звучит глупо. Эти числа используются для помощи пользовательской подсистеме разруливать ситуации, когда несколько клавиатур используют один и тот же LANGID (что случается для многих клавиатур, поставляемых с Windows). Каждая клавиатурная раскладка, которая использует LANGID повторно, должна: (1) иметь его и (2) он не должен повторять уже присвоенный системой. Если любое из условий не выполняется, то у вас будут проблемы с правильным выбором раскладки.
- KLID - идентификатор клавиатурной раскладки (keyboard layout identifier). Обычно произносится как "кай-эл-ай-ди", потому что некоторые люди в США очень сильно озабочены некоторыми омонимами (иногда, вы можете поймать меня на этом). Его также иногда называют идентификатором раскладки ввода (input locale identifier), потому что имя для HKL было обновлено (см. определение HKL ниже, чтобы понять, почему это неверно, т.к. HKL означает что-то другое). KLID может быть получен для текушей выбранной раскладки клавиатуры в потоке через функцию GetKeyboardLayoutName (обратите внимание на параметр pswzKLID), хотя это не так для любой другой выбранной или установленной клавиатурной раскладки. Каждая клавиатурная раскладка имеет один из таких идентификаторов. Каждый KLID является числом в 32 бита (т.е. 8 hex-цифр), и они все могут быть найдены в реестре как подключи под ключом HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\. Младшая половина KLID - это LANGID, а верхняя часть определяется устройством. Есть соглашение, согласно которому первая hex-цифра при этом означает следующее:
- 0 - Большинство клавиатурных раскладок
- A - клавиатурные раскладки, определяемые MSKLC
- D - некоторые не-CJK методы ввода, которые были определены Text Services Framework (примечание: так мне сказали; я никогда таких не видел!)
- E - методы ввода CJK, также известные как IME.
- HKL - описатель клавиатурной раскладки (handle to a keyboard layout), обычно произносимый как "аш-ка-эл". Ребята из отдела терминологии очень агрессивно настаивают, что он должен называться "идентификатор локали ввода" (input locale identifier), несмотря на то, что он не имеет никакого отношения к локалям, и это не то же самое значение, что настоящий идентификатор (KLID). HKL это просто описатель метода ввода. Хотя он определён как описатель, у него используются только младшие 32 бита (прим. пер.: видимо, имеется ввиду 64-х разрядная система). Из этих 32-х битов, младшие 16 представляют LANGID, а старшие 16 представляют значение, формируемое подсистемой USER для уникальной идентификации установленной клавиатурной раскладки. Это имеет значение, потому что любая клавиатурная раскладка может быть установлена больше одного раза (например, установкой в различных языках, что помогает при операциях типа проверки грамматики).
- MKLC - см. MSKLC. Единственные, кто называет это MKLC - это те, кто говорят, что MSKLC не настоящий акроним (типа, Microsoft - это одно слово). Никто в документации или пользовательском интерфейсе не называет это так, поэтому кажется невероятным, что я потратил уже два предложения на него в этом словарике, но люди не из Microsoft используют его постоянно.
- MSKLC - Microsoft Keyboard Layout Creator, обычно произносимый как "эм-ес-кай-эль-си" людьми, которые не поддались на аргументы сторонников MKLC. MKLC/MSKLC - это утилита, выпущенная Microsoft, которая позволяет любому создать свою собственную клавиатурную раскладку и сделать установщик для неё, который сможет установить раскладку на Windows NT 4.0, 2000, XP или Server 2003. Справочный файл содержит кучу информации о лучших способах для проектировки раскладок, которые будут хорошо работать в Windows. Я являюсь её разработчиком и жажду услышать любые мнения, в любое время, поскольку всегда есть что улучшать.
- IME - редактор метода ввода (input method editor), обычно произносимый как "ай-эм-и". IME - это движок, который конвертирует нажатия клавиш в фонетические или идеографические символы. Это просто часто используемая абстракция, которая позволяет клавиатурам, имея около 100 клавиш, позволять вводить более 20'000 символов. В Platform SDK есть старые примеры использования API менеджера методов ввода (IMM), но сегодня большинство IME, написанных Microsoft, используют более подходящий Text Services Framework.
- Поддерживаемая клавиатурная раскладка (supported keyboard layout) - это несколько странная терминология, которая, на самом деле, означает, что клавиатурная раскладка определена в системе. Не всегда пользователь может её выбрать (например, если это тайская раскладка, а поддержка тайского языка не установлена). Кроме того, это может быть IME или конвертер речь-в-текст, так что, быть может, термин "определённые метод ввода" был бы более удачным. Эта терминология постепенно удаляется из документации, хотя не совсем ясно, на что же её заменяют.
- Установленная клавиатурная раскладка (installed keyboard layout) - ещё одна странная терминология, которая означает клавиатурную раскладку, которую выбрал пользователь. Это снова может быть IME или конвертер, поэтому лучшим вариантом было бы "выбранный метод ввода". Эта терминология постепенно удаляется из документации, хотя не совсем ясно, на что же её заменяют.
- Скан-код - (scan code) это число, даваемое каждой физической клавише на клавиатуре; скан-код - это число, идентифицирующее клавишу, оно зависит от устройства. Понятно, что скан-коды имеют фиксированное расположение на клавиатуре, вне зависимости от выбранной раскладки.
- Виртуальная клавиша - (virtual key) также называемая VK, это код, который даётся подсистемой USER Windows для обозначения нажатой клавиши. Он получается из скан-кода, в зависимости от выбранной раскладки. Причиной этого является выбор (имхо, неудачный), что, скажем, VK_A используется для клавиши 'A', но это означает, что на клавиатурах, которые размещают 'A' в другой позиции, VK должен быть перемещён.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.