WM_INPUTLANGCHANGE 消息

在应用程序的输入语言被更改后发送给最顶层的受影响窗口。 应进行任何特定于应用程序的设置并将消息传递给 DefWindowProc 函数,该函数会将该消息传递到所有第一级子窗口。 这些子窗口可以将消息传递给 DefWindowProc,让它将消息传递给这些子窗口的子窗口,依此类推。

窗口通过其 WindowProc 函数接收此消息。

#define WM_INPUTLANGCHANGE              0x0051

参数

wParam

类型:**WPARAM**

为输入语言设置的 BYTE 字体字符集。

如果使用 RegisterClassEx 的 Unicode 版本 (RegisterClassExW) 注册窗口类,则通常不需要使用此值。 如果使用 RegisterClassEx 的 ANSI 版本 (RegisterClassExA) 注册窗口类,则此值可用于创建能够正确显示字符集的字体。 有关可能值的列表,请参阅 CreateFont 函数iCharSet 参数。

lParam

类型:**LPARAM**

HKL 输入区域设置标识符

低字包含输入语言的语言标识符。 高字包含设备句柄。

返回值

类型:LRESULT

如果应用程序处理此消息,它应返回非零。

备注

可以通过调用 LCIDToLocaleName 函数从语言标识符检索 BCP 47区域设置名称。 获得区域设置名称后,可以使用新式区域设置函数提取其他区域设置信息。

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 的键盘标识符和输入法编辑器

可能不会使用 WM_INPUTLANGCHANGE 通知输入法编辑器 (IME) 配置文件更改。 可以使用文本服务框架中的 ITfActiveLanguageProfileNotifySink 来处理活动语言或文本服务更改。

从 Windows 8 开始

某些输入布局可能没有分配语言标识符,并且可以在 LPARAM 的低字中报告为暂时性语言标识符,例如 LOCALE_TRANSIENT_KEYBOARD1 (0x2000) 或 LOCALE_TRANSIENT_KEYBOARD2 (0x2400)。

由于系统可以随时重新分配这些暂时性语言标识符(例如当用户更改其语言配置文件时),并且这些标识符可以根据用户和/或系统标识不同的区域设置,因此它们不能被视为持久标识符。 有关详细信息,请参阅弃用 LCID

通过调用 Windows.Globalization.Language.CurrentInputMethodLanguageTag 检索与当前键盘布局或输入法关联的语言。 如果应用将语言标记从 CurrentInputMethodLanguageTag 传递到任何国家语言支持函数,则必须先使用 ResolveLocaleName 转换标记。 如果要在 UWP 应用中收到有关语言更改的通知,请处理 Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged 事件。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h(包括 Windows.h)

另请参阅

引用

Conceptual