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之前:防止 ShellProc 挂钩过程在加载新的输入区域设置标识符时接收HSHELL_LANGUAGE挂钩代码。 当应用程序逐个加载多个输入区域设置标识符时,通常会使用此值。 将此值应用于除最后一个输入区域设置标识符之外的所有输入区域设置标识符会延迟 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”) 会导致美联航 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,它应读取注册表以确定要传递给 LoadKeyboardLayout 的特定输入区域设置标识符。 在这种情况下,激活区域设置的默认输入区域设置标识符的请求将激活第一个匹配的区域设置标识符。 应使用从 GetKeyboardLayout 或 LoadKeyboardLayout 返回的显式输入区域设置标识符激活特定的 IME

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

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

注意

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

要求

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

另请参阅

ActivateKeyboardLayout

概念性

GetKeyboardLayoutName

键盘输入

MAKELANGID

其他资源

引用

UnloadKeyboardLayout