Познавательный блог Мобильная врсия

Страницы

Промо

Как сменить раскладку на C++. Функции ActivateKeyboardLayout и LoadKeyboardLayout.

Функция ActivateKeyboardLayout активизирует другую раскладку символов на клавиатуре и устанавливает активную раскладку символов в целом для системы, а не для вызывающего потока.

Синтаксис

BOOL ActivateKeyboardLayout(
HKL hkl, // дескриптор раскладки клавиатуры
UINT Flags // флажки раскладки клавиатуры
);

Параметры
hkl — Идентифицирует раскладку символов на клавиатуре, которая будет активизирована. Раскладка должна быть загружена предыдущим вызовом функции LoadKeyboardLayout. Этот параметр должен быть или дескриптор раскладки символов на клавиатуре или одно из следующих значений:

  1. HKL_NEXT - Выбирает следующую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.
  2. HKL_PREV - Выбирает предыдущую раскладку в списке раскладок символов на клавиатуре, поддерживаемых системой.

Flags — Определяет, какая раскладка символов на клавиатуре должна быть активизирована. Этот параметр может быть одним из следующих значений:

  1. KLF_REORDER - Если этот бит установлен, кольцевой список системы загруженных раскладок символов на клавиатуре переупорядычевается. Если этот бит не установлен, список чередуется без изменения порядка. Например, если пользователь имел активной Английскую раскладку, а также имеет загруженные Французскую, Немецкую и Испанскую раскладки (вот в таком порядке), то активизация Немецкой раскладки с установленным битом KLF_REORDER создаст следующий порядок: Немецкая, Английская, Французская, Испанская раскладки. Активизация Немецкой раскладки без установки значения KLF_REORDER создала бы следующий порядок: Немецкая, Испанская, Английская, Французская раскладки.Если загружены меньше чем три раскладки символов на клавиатуре, значение этого флажка не применяется.
  2. KLF_UNLOADPREVIOUS - Предварительно загружает активную раскладку клавиатуры.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - ИСТИНА (TRUE).
Если функция не выполняет задачу, величина возвращаемого значения - ЛОЖЬ(FALSE). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Несколько раскладок символов на клавиатуре могут быть загруженными в любой момент, но в каждый момент времени активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключиться между раскладками.

___________________________________________

Функция LoadKeyboardLayout загружает раскладку символов на клавиатуре.

Синтаксис

HKL LoadKeyboardLayout(
LPCTSTR pwszKLID, // адрес буфера с названием раскладки
UINT Flags // флажки раскладки клавиатуры
);

Параметры
pwszKLID — Указывает на буфер, который определяет название раскладки символов на клавиатуре. Название должно быть получено из шестнадцатеричного значения идентификатора языка, соответствующего раскладке. Например, Американский Английский язык имеет идентификатор языка 0x0409, так что первичная Американская Английского языка раскладка называется "00000409". Варианты Американской Английского языка раскладки, типа раскладки Дворака, названы "00010409", "00020409", и так далее. За списком первичных идентификаторов языка и идентификаторов подмножества языка, которые составляют идентификатор языка, следит макрокоманда MAKELANGID.

Flags — Устанавливает, как раскладка символов на клавиатуре должна быть загружена. Этот параметр может быть одним из следующих значений:

  1. KLF_ACTIVATE - Функция загружает раскладку, если она ещё не загружена, и активизирует её. Это значение активизирует раскладку для системы, взятой в целом, а не только для вызывающего потока.
  2. KLF_REORDER - Этот флажок значим, только тогда, если установлен флажок KLF_ACTIVATE, а раскладка уже загружена. Если эти условия выполнены и бит KLF_REORDER установлен, функция удаляет заданную раскладку из её позиции в круговом списке системы загруженных раскладок и перемещает её в голову списка как активную раскладку.Если бит KLF_ACTIVATE установлен и раскладка загружена, но бит KLF_REORDER не установлен, функция просто вращает круговой список загруженных раскладок в системе.Если флажок KLF_ACTIVATE установлен, а раскладка ещё не загружена, она загружается как активная раскладка и вставляется в системный круговой список раскладок клавиатуры впереди активной предыдущей раскладки.
  3. KLF_SUBSTITUTE_OK - Заданная раскладка ищет в конфигурации пользователя (в системном реестре под ключом HKEY_CURRENT_USER\Keyboard Layout\Substitutes) раскладку замены, предпочитаемую пользователем. Например, если в этом разделе имелось значение названия "00000409" равное "00010409", загружается Американская Английского языка раскладка ("00000409") с установкой флажка KLF_SUBSTITUTE_OK, который заставит быть загруженной раскладку США Английского языка Дворака ("00010409")
  4. KLF_UNLOADPREVIOUS - Если флажок KLF_ACTIVATE установлен, а раскладка успешно загружена и активизирована, функция выгружает активную предыдущую раскладку. Иначе, функция игнорирует этот флажок.

Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - дескриптор раскладки символов на клавиатуре.
Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Одновременно могут быть загруженными несколько раскладок символов на клавиатуре, но активной может быть только одна. Загрузка многочисленных раскладок символов на клавиатуре делает возможным быстро переключаться между ними.

Комментарии

Комментарий от Andym [ 1 октября, 2008, 21:23 ]

Спасибо, полезный материал. Добавил ваш блог в закладки.

Комментарий от AleksanderII [ 7 ноября, 2009, 23:24 ]

Нужна помощь

Комментарий от NENser [ 19 ноября, 2009, 11:00 ]

В MSDN’е написано, что функция ActivateKeyboardLayout возвращает значение HKL, а не BOOL. Кроме того, для LoadKeyboardLayout имеются и другие флаги.

Комментарий от Destroyer [ 18 сентября, 2010, 04:03 ]

как узнать раскладку клавиатуры в консольном окне, не используя глобального хука?

Написать комментарий








Поиск по сайту

Статистика

Мета

  Разработка и дизайн — StvPromo.ru