Как поменять символ введёный с клавиатуры, используя windows hook?

Не работает замена символа должным образом. Т.е к примеру, мне нужно поменять символ 'з' (русский) на 'Z', но 'з' меняется на 'я', при русской раскладке. Как это исправить?

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    BOOL fEatKeystroke = FALSE;

    if (nCode == HC_ACTION)
    {
    switch (wParam)
    {
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
        case WM_KEYUP:
        case WM_SYSKEYUP:
            PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
            if (fEatKeystroke = (p->vkCode == 0x50))  //redirect p to z
            {     
                if ( (wParam == WM_KEYDOWN) || (wParam == WM_SYSKEYDOWN) ) // Keydown
                { 
                    keybd_event('Z', 0, 0, 0);
                }
                else if ( (wParam == WM_KEYUP) || (wParam == WM_SYSKEYUP) ) // Keyup
                {
                    keybd_event('Z', 0, KEYEVENTF_KEYUP, 0);
                }
                break;
            }
            break;
    }
    
    }
    return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}

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