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


сообщение WM_INPUTLANGCHANGE

Отправлено в самое главное затронутое окно после изменения языка ввода приложения. Вы должны сделать все параметры, относящиеся к приложению, и передать сообщение функции DefWindowProc, которая передает сообщение всем дочерним окнам первого уровня. Эти дочерние окна могут передать сообщение в DefWindowProc , чтобы передать сообщение в дочерние окна и т. д.

Окно получает это сообщение через функцию WindowProc .

#define WM_INPUTLANGCHANGE              0x0051

Параметры

wParam

Тип: **WPARAM**

Символ шрифта BYTE для языка ввода.

Если вы регистрируете класс окна с помощью версии RegisterClassEx (RegisterClassExW), обычно не нужно использовать это значение. Если вы регистрируете класс окна с помощью версии ANSI RegisterClassEx (RegisterClassExA), это значение можно использовать для создания шрифтов, которые могут правильно отображать набор символов. Список возможных значений см. в параметре iCharSet функции CreateFont.

lParam

Тип: **LPARAM**

Идентификатор языкового стандарта HKL .

Низкое слово содержит идентификатор языка для языка ввода. Высокое слово содержит дескриптор устройства.

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

Тип: LRESULT

Приложение должно возвращать ненулевое значение, если оно обрабатывает это сообщение.

Замечания

Вы можете получить имя языкового стандарта BCP 47из идентификатора языка, вызвав функцию LCIDToLocaleName. После получения имени языкового стандарта можно использовать современные функции языкового стандарта для извлечения дополнительных сведений о языковом стандарте.

case WM_INPUTLANGCHANGE:
{
    HKL hkl = (HKL)lParam;
    // LANGIDs are deprecated. Use BCP 47 locale names where possible.
    LANGID langId = LOWORD(HandleToUlong(hkl));

    WCHAR localeName[LOCALE_NAME_MAX_LENGTH];
    LCIDToLocaleName(MAKELCID(langId, SORT_DEFAULT), localeName, LOCALE_NAME_MAX_LENGTH, 0);

    // Get the ISO abbreviated language name (for example, "eng").
    WCHAR lang[9];
    GetLocaleInfoEx(localeName, LOCALE_SISO639LANGNAME2, lang, 9);
    
    // Get the keyboard layout identifier (for example, "00020409" for United States-International keyboard layout)
    WCHAR keyboardLayoutId[KL_NAMELENGTH];
    GetKeyboardLayoutNameW(keyboardLayoutId);
}

Чтобы получить имя активной раскладки клавиатуры, вызовите GetKeyboardLayoutName. Дополнительные сведения см. в разделах "Языки", "Языковые стандарта" и "Раскладки клавиатуры".

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

Изменения профиля редактора методов ввода (IME) могут не получать уведомления с помощью WM_INPUTLANGCHANGE. Вы можете использовать ITfActiveLanguageProfileNotifySink из платформы текстовых служб для обработки активных изменений языка или текстовой службы.

Начиная с Windows 8

Некоторые макеты входных данных могут не назначать идентификаторы языка и могут быть переданы как временные идентификаторы языка, например LOCALE_TRANSIENT_KEYBOARD1 (0x2000) или LOCALE_TRANSIENT_KEYBOARD2 (0x2400), в низком слове LPARAM.

Так как эти временные идентификаторы языка могут быть переназначаются системой в любое время (например, когда пользователь изменяет свой профиль языка) и может определять другой языковой стандарт на основе пользователя и /или системы, они не могут считаться устойчивыми идентификаторами. Дополнительные сведения см. в разделе об отмене LCID.

Получите язык, связанный с текущим макетом клавиатуры или методом ввода, вызвав Windows.Globalization.Language.CurrentInputMethodLanguageTag. Если приложение передает теги языка из CurrentInputMethodLanguageTag в любые функции поддержки национального языка, сначала необходимо преобразовать теги с Помощью ResolveLocaleName. Если вы хотите получать уведомления об изменении языка в приложении UWP, обработайте событие Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged .

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (включая Windows.h)

См. также

Ссылка

Концептуальной