ToAsciiEx не работает, как ожидалось

Пишу hook для клавиатуры. Вот код callback-функции:

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (wParam == WM_KEYDOWN)
    {
        PKBDLLHOOKSTRUCT kb_event = (PKBDLLHOOKSTRUCT)lParam;
        CHAR result;
        BYTE kb_state[256];
        GetKeyboardState(kb_state);
        int c = ToAsciiEx(kb_event->vkCode, 0, kb_state, &result, 0, GetKeyboardLayout(GetCurrentThreadId()));
        if (c)
            printf("%c\n", result);
    }

    return 0;
}

Если я правильно всё понял, то ToAsciiEx должна переводить vk-code в соответствующий ему символ в зависимости от активной раскладки клавиатуры. Но при переключении раскладки во время работы программы ничего не меняется. Почему программа работает только с той раскладкой, с которой была запущена? Как это исправить?


Ответы (0 шт):