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 [仅限桌面应用] |
标头 |
|
另请参阅
引用
- DefWindowProc
- WindowProc
- WM_INPUTLANGCHANGEREQUEST
- GetKeyboardLayout
- GetKeyboardLayoutList
- GetKeyboardLayoutName
- Windows.Globalization.Language.CurrentInputMethodLanguageTag
- Windows.UI.Text.Core.CoreTextServicesManager.InputLanguageChanged
Conceptual