如何通过 Delphi 的 WinAPI 以编程方式获取和设置输入语言?

问题描述

我如何以编程方式通过来自 Delphi 的 WinAPI 获取和设置输入语言(也可以从 Windows 任务栏设置):

enter image description here

请注意:输入语言不是 Windows UI 中显示的语言。 输入语言是特定语言特定键盘键在键盘输入时使用的语言。

解决方法

获取输入语言

您可以使用 GetKeyboardLayoutListGetKeyboardLayoutName 列出键盘标识符。

一些代码:(C++)

HKL hklArr[100];
int cnt = GetKeyboardLayoutList(100,hklArr);
if (cnt > 0)
{
    for (UINT i = 0; i < cnt; i++)
    {
        if (ActivateKeyboardLayout(hklArr[i],0))
        {
            CHAR pName[KL_NAMELENGTH];
            if (GetKeyboardLayoutNameA(pName))
            {
                printf("layout name (KLID): %s\n",pName);                  
            }
        }
    }
}

调试:

enter image description here

然后可以根据键盘标识符获取输入语言。

参考:Keyboard Identifiers and Input Method Editors for Windows

设置输入语言

使用 WM_INPUTLANGCHANGEREQUEST 消息,

一些代码:

HKL hkl = LoadKeyboardLayout(L"00000409",KLF_ACTIVATE);
PostMessage(GetConsoleWindow(),WM_INPUTLANGCHANGEREQUEST,(LPARAM)hkl);

键盘将切换到“美国-英语”。

您也可以设置 INPUTLANGCHANGE_FORWARD 参数,它将使用热键在已安装的输入语言环境列表中选择下一个输入语言环境。