Win32 API. Функции и сообщения ввода информации с клавиатуры
Страница 15. Функция LoadKeyboardLayout


Функция LoadKeyboardLayout

Реализация LoadKeyboardLayout в Windows 95 и Windows NT существенно различаются. Чтобы выявить эти различия, эта страница справочника первые представляет ее реализацию в среде Windows 95 во всей полноте, в соответствии с версией Windows NT.

Windows 95:

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

Синтаксис

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

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

  • KLF_ACTIVATE - Если данная раскладка ещё не загружена, функция загружает и активизирует раскладку для текущего потока, вставляя раскладку в голову списка раскладок символов на клавиатуре, впереди активной предыдущей раскладки. Если раскладка уже загружена, а значение KLF_REORDER не дается, функция просто вращает список раскладок символов на клавиатуре, делая следующую раскладку активной.
  • KLF_NOTELLSHELL - Препятствует подключаемой процедуре ShellProc принимать код hook-точки HSHELL_LANGUAGE, когда загружается новая раскладка. Это значение обычно используется тогда, когда прикладная программа загружает многочисленные раскладки, одну за другой. Применение этого значения, ко всем кроме последней раскладки, задерживает обработку оболочки, пока не будут добавлены все раскладки.
  • KLF_REORDER - Перемещает данную раскладку в голову списка раскладок символов на клавиатуре, делая её активной для текущего потока. Это значение переупорядочивает список раскладок символов на клавиатуре, даже если не дается KLF_ACTIVATE
  • KLF_REPLACELANG - Если новая раскладка имеет тот же самый идентификатор языка, как и текущая раскладка, новая раскладка заменяет текущую как раскладку для этого языка. Если это значение не дается, а раскладки имеют те же самые идентификаторы языка, текущая раскладка не заменяется, а функция возвращает значение ПУСТО (NULL).
  • KLF_SUBSTITUTE_OK - Меняет заданную раскладку символов на клавиатуре другой раскладкой, предпочитаемой пользователем. Замена происходит, только тогда, если ключ регистрации HKEY_CURRENT_USER\Keyboard Layout\Substitutes явно определяет замену раскладки. Например, если ключ включает в себя значение названия "00000409" со значением "00010409", загрузка Американской Английского языка раскладки ("00000409") вынуждает быть загруженной вместо её раскладку США Английского языка Дворака ("00010409"). Система использует KLF_SUBSTITUTE_OK при загрузке, и рекомендуется, чтобы все прикладные программы использовали также это значение.

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

Замечания
Если раскладка загружается с тем же самым языком, какой был до этого загружен, а флажок KLF_REPLACELANG не устанавливается, вызов функции терпит неудачу. Только одна загруженная раскладка может быть связана с данным языком. (Это приемлемо для многих IMEs, которые загружаются связанные с тем же самым языком.)
Прикладная программа может и должна, обычно желательно, загрузить заданную по умолчанию раскладку или IME для языка, а может сделать так при помощи определения только строковой версии идентификатора языка. Если прикладная программа хочет загрузить заданную раскладку или IME, она должна прочитать системный реестр, чтобы установить заданный идентификатор раскладки, чтобы передать его в LoadKeyboardLayout. В этом случае, запрос активизирует заданный по умолчанию дескриптор раскладки символов на клавиатуре для региона, который приведет в действие одно из первых соответствий. Заданный IME должен быть активизирован, используя явный дескриптор раскладки символов на клавиатуре, возвращенный от одной из функций GetKeyboardLayout, GetKeyboardLayoutList или LoadKeyboardLayout.

Смотри также
ActivateKeyboardLayout, GetKeyboardLayout, GetKeyboardLayoutName, MAKELANGID, UnloadKeyboardLayout

Windows NT:

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

Синтаксис

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

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

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

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

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

Смотри также
ActivateKeyboardLayout, GetKeyboardLayoutName, UnloadKeyboardLayout

Размещение и совместимость LoadKeyboardLayout

Windows NTДа 
Win95Да
Win32sНет
Импортируемая библиотекаuser32.lib
Заголовочный файлwinuser.h
UnicodeWinNT
Замечания по платформеWindows 95: В одно и то же время загружается только 1 клавиатура

 
« Предыдущая статья   Следующая статья »