Как программно ПОЛУЧИТЬ и УСТАНОВИТЬ язык ввода с помощью WinAPI из Delphi?

Как я могу программно ПОЛУЧИТЬ и УСТАНОВИТЬ язык ввода с помощью WinAPI из Delphi (который также можно установить с панели задач Windows):

введите здесь описание изображения

Обратите внимание: Язык ввода НЕ является языком, отображаемым в пользовательском интерфейсе Windows. Язык ввода — это язык, используемый клавишами клавиатуры для определенного языка при вводе с клавиатуры.


person user1580348    schedule 25.01.2021    source источник
comment
На этот вопрос, вероятно, уже был дан ответ: stackoverflow.com/questions/819665/   -  person fpiette    schedule 25.01.2021


Ответы (1)


ПОЛУЧИТЬ язык ввода

Вы можете использовать GetKeyboardLayoutList и GetKeyboardLayoutName для отображения идентификатора клавиатуры.

Некоторый код: (С++)

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);                  
            }
        }
    }
}

Отлаживать:

введите здесь описание изображения

Затем вы можете получить язык ввода на основе идентификатора клавиатуры.

См.: Идентификаторы клавиатуры и ввод Редакторы методов для Windows

УСТАНОВИТЕ язык ввода

Используя сообщение WM_INPUTLANGCHANGEREQUEST,

Некоторый код:

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

Клавиатура переключится на американский английский.

Вы также можете установить параметр INPUTLANGCHANGE_FORWARD, он будет использовать горячую клавишу для выбора следующей локали ввода в списке установленных локалей ввода.

person Strive Sun    schedule 26.01.2021