LoadKeyboardLayoutA 函数 (winuser.h)

将新的输入区域设置标识符(以前称为键盘布局)加载到系统中。

在 Windows 8 之前 一次可以加载多个输入区域设置标识符,但每次只有一个进程处于活动状态。 加载多个输入区域设置标识符可以快速在它们之间切换。

从 Windows 8 开始: 为整个系统加载输入区域设置标识符。 如果当前进程不拥有具有键盘焦点的窗口,则此函数不起作用。

语法

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

参数

[in] pwszKLID

类型:LPCTSTR

要加载的输入区域设置标识符的名称。 此名称是由 语言标识符(低字)和设备标识符(高字)的十六进制值组成的字符串。 例如,美国英语的语言标识符为0x0409,因此美国英语的主要布局名为“00000409”。 美国英语布局(如 Dvorak 布局)的变体命名为“00010409”、“00020409”等。

有关 Windows 提供的输入布局的列表,请参阅适用于 Windows的 键盘标识符和输入法编辑器。

[in] Flags

类型:UINT

指定如何加载输入区域设置标识符。 此参数可以是以下一个或多个值。

价值 意义
KLF_ACTIVATE
0x00000001
在 Windows 8 之前 如果指定的输入区域设置标识符尚未加载,函数将加载并激活当前线程的输入区域设置标识符。

从 Windows 8 开始: 如果指定的输入区域设置标识符尚未加载,函数将加载并激活系统的输入区域设置标识符。

KLF_NOTELLSHELL
0x00000080
在 Windows 8 之前 阻止加载新的输入区域设置标识符时接收 HSHELL_LANGUAGE 挂钩代码的 ShellProc 挂钩过程。 当应用程序逐个加载多个输入区域设置标识符时,通常会使用此值。 将此值应用于所有输入区域设置标识符,但最后一个输入区域设置标识符会延迟 shell 的处理,直到添加所有输入区域设置标识符。

从 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 显式定义替换区域设置时,才会发生替换。 例如,如果键包含值为“00010409”的值名称“00000409”,则加载美国布局(“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的特定输入区域设置标识符。 在这种情况下,激活区域设置的默认输入区域设置标识符的请求将激活第一个匹配的区域设置标识符。 应使用从 GetKeyboardLayout 返回的显式输入区域设置标识符或 LoadKeyboardLayout激活特定的 IME。

在 Windows 8 之前 此函数仅影响当前进程或线程的布局。

从 Windows 8 开始: 此函数会影响整个系统的布局。

注意

winuser.h 标头将 LoadKeyboardLayout 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winuser.h (包括 Windows.h)
User32.lib
DLL User32.dll

另请参阅

ActivateKeyboardLayout

概念

GetKeyboardLayoutName

键盘输入

MAKELANGID

其他资源

参考

UnloadKeyboardLayout