Поделиться через


Функция LoadKeyboardLayoutA (winuser.h)

Загружает в систему новый идентификатор языкового стандарта ввода (прежнее название — раскладка клавиатуры).

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

Начиная с Windows 8. Идентификатор входного языкового стандарта загружается для всей системы. Эта функция не действует, если текущий процесс не владеет окном с фокусом клавиатуры.

Синтаксис

HKL LoadKeyboardLayoutA(
  [in] LPCSTR pwszKLID,
  [in] UINT   Flags
);

Параметры

[in] pwszKLID

Тип: LPCTSTR

Имя идентификатора входного языкового стандарта для загрузки. Это имя представляет собой строку, состоящую из шестнадцатеричного значения идентификатора языка (низкое слово) и идентификатора устройства (высокое слово). Например, в английском языке США есть идентификатор языка 0x0409, поэтому основной макет английского языка США называется "00000409". Варианты американского английского макета (например, макет Дворжак) называются "00010409", "00020409" и т. д.

Список входных макетов, которые поставляются вместе с Windows, см. в разделе Идентификаторы клавиатуры и Редакторы методов ввода для Windows.

[in] Flags

Тип: UINT

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

Значение Значение
KLF_ACTIVATE
0x00000001
До Windows 8. Если указанный идентификатор входного языкового стандарта еще не загружен, функция загружает и активирует идентификатор входного языкового стандарта для текущего потока.

Начиная с Windows 8. Если указанный идентификатор входного языкового стандарта еще не загружен, функция загружает и активирует идентификатор входного языкового стандарта для системы.

KLF_NOTELLSHELL
0x00000080
До Windows 8. Запрещает процедуре перехватчика ShellProc получать код перехватчика HSHELL_LANGUAGE при загрузке нового идентификатора входного языкового стандарта. Это значение обычно используется, когда приложение загружает несколько входных идентификаторов языкового стандарта один за другим. Применение этого значения ко всем идентификаторам языкового стандарта, кроме последнего, задерживает обработку оболочки до тех пор, пока не будут добавлены все входные идентификаторы языкового стандарта.

Начиная с Windows 8. В этом сценарии последний входной идентификатор языкового стандарта устанавливается для всей системы.

KLF_REORDER
0x00000008
До Windows 8. Перемещает указанный идентификатор входного языкового стандарта в головку списка идентификаторов входного языкового стандарта, делая этот идентификатор активным идентификатором языкового стандарта для текущего потока. Это значение переупорядочение списка идентификаторов входного языкового стандарта, даже если KLF_ACTIVATE не указан.

Начиная с Windows 8. Перемещает указанный идентификатор входного языкового стандарта в голову списка идентификаторов входного языкового стандарта, делая этот идентификатор активным идентификатором языкового стандарта для системы. Это значение переупорядочение списка идентификаторов входного языкового стандарта, даже если KLF_ACTIVATE не указан.

KLF_REPLACELANG
0x00000010
Если новый идентификатор входного языкового стандарта имеет тот же идентификатор языка, что и идентификатор текущего входного языкового стандарта, новый идентификатор входного языкового стандарта заменяет текущий в качестве идентификатора входного языкового стандарта для этого языка. Если это значение не указано, а идентификаторы входного языкового стандарта имеют одинаковые идентификаторы языка, текущий идентификатор языкового стандарта не заменяется и функция возвращает значение NULL.
KLF_SUBSTITUTE_OK
0x00000002
Заменяет указанный идентификатор входного языкового стандарта другим языковым стандартом, предпочитаемым пользователем. Система начинается с этого набора флагов, и рекомендуется, чтобы приложение всегда использовало этот флаг. Подстановка происходит только в том случае, если раздел реестра HKEY_CURRENT_USER\Keyboard Layout\Substitutes явно определяет языковой стандарт подстановки. Например, если ключ содержит имя значения "00000409" со значением "00010409", загрузка макета США ("00000409") приведет к загрузке макета United States-Dvorak ("00010409"). Система использует KLF_SUBSTITUTE_OK при загрузке, и рекомендуется, чтобы все приложения использовали это значение при загрузке идентификаторов входного языкового стандарта, чтобы убедиться, что выбраны предпочтения пользователя.
KLF_SETFORPROCESS
0x00000100
До Windows 8. Этот флаг действителен только для KLF_ACTIVATE. Активирует указанный идентификатор входного языкового стандарта для всего процесса и отправляет сообщение WM_INPUTLANGCHANGE в окно фокуса или активно текущего потока. Как правило, LoadKeyboardLayout активирует идентификатор входного языкового стандарта только для текущего потока.

Начиная с Windows 8: этот флаг не используется. LoadKeyboardLayout всегда активирует идентификатор входного языкового стандарта для всей системы, если текущий процесс владеет окном с фокусом клавиатуры.

KLF_UNLOADPREVIOUS
Этот флаг не поддерживается. Вместо этого используйте функцию UnloadKeyboardLayout .

Возвращаемое значение

Тип: HKL

Если функция выполнена успешно, возвращаемым значением будет идентификатор входного языкового стандарта, соответствующий имени, указанному в pwszKLID. Если соответствующий языковой стандарт недоступен, возвращаемое значение является языком по умолчанию в системе.

Если функция завершается сбоем, возвращается значение NULL. Это может произойти, если библиотека макета загружена из каталога приложения.

Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Идентификатор языкового стандарта ввода является более широким понятием, чем раскладка клавиатуры, так как он также может охватывать преобразователь речи в текст, метод ввода Редактор (IME) или любую другую форму ввода.

Как правило, приложение может загружать идентификатор входного языкового стандарта или IME по умолчанию для языка и может сделать это, указав только строковую версию идентификатора языка. Если приложение хочет загрузить определенный языковой стандарт или IME, оно должно прочитать реестр, чтобы определить конкретный идентификатор входного языкового стандарта для передачи в LoadKeyboardLayout. В этом случае запрос на активацию идентификатора входного языкового стандарта по умолчанию для языкового стандарта активирует первый соответствующий. Определенный IME следует активировать с помощью явного входного идентификатора языкового стандарта, возвращаемого из GetKeyboardLayout или LoadKeyboardLayout.

До Windows 8. Эта функция влияет только на макет текущего процесса или потока.

Начиная с Windows 8. Эта функция влияет на макет всей системы.

Примечание

Заголовок winuser.h определяет LoadKeyboardLayout в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел

ActivateKeyboardLayout

Основные понятия

GetKeyboardLayoutName

Ввод с клавиатуры

MAKELANGID

Другие ресурсы

Справочные материалы

UnloadKeyboardLayout