【问题标题】:How to programmatically GET and SET the Input Language by WinAPI from Delphi?如何通过 Delphi 的 WinAPI 以编程方式获取和设置输入语言?
【发布时间】:2021-01-25 16:40:01
【问题描述】:

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

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

【问题讨论】:

标签: delphi winapi delphi-10.4-sydney


【解决方案1】:

获取输入语言

您可以使用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);                  
            }
        }
    }
}

调试:

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

参考:Keyboard Identifiers and Input Method Editors for Windows

设置输入语言

使用WM_INPUTLANGCHANGEREQUEST消息,

一些代码:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2011-10-03
    • 2011-06-26
    • 1970-01-01
    • 2010-10-23
    • 2017-03-16
    相关资源
    最近更新 更多