SendInput不发送字符或数字

时间:2012-02-10 19:31:33

标签: c++ windows keyboard

我有类似的东西:

void generateKeybdEvent(int vk, bool extended) {
    KEYBDINPUT kb = {0};
    INPUT Input = {0};

    if ( extended )
        kb.dwFlags = KEYEVENTF_EXTENDEDKEY;
    kb.wVk = vk;
    Input.type = INPUT_KEYBOARD;
    Input.ki = kb;
    SendInput(1, &Input, sizeof(Input));

    ZeroMemory(&kb, sizeof(KEYBDINPUT));
    ZeroMemory(&Input, sizeof(INPUT));
    kb.dwFlags = KEYEVENTF_KEYUP;
    if ( extended )
        kb.dwFlags |= KEYEVENTF_EXTENDEDKEY;

    kb.wVk = vk;
    Input.type = INPUT_KEYBOARD;
    Input.ki = kb;
    SendInput(1, &Input, sizeof(Input));
}

当我发送输入'A',CapsLock,'A'时:

generateKeybdEvent ('A', false);
generateKeybdEvent (VK_CAPITAL, true);
generateKeybdEvent ('A', false);

唯一的影响是我的num lock切换。

为什么我无法向应用发送字符或数字?

注意我使用的是带有波兰语键盘布局的Windows 7和带有MinGW的Qt。

1 个答案:

答案 0 :(得分:0)

VK_CAPITAL不是扩展密钥 如果(vk >= 33 && vk <= 46) || (vk >= 91 && vk <= 93),则会延长密钥。

此处也可以省略ZeroMemory,因此您的函数可能如下所示:

KEYBDINPUT kb = {0};
INPUT Input = {0};

if ( (vk >= 33 && vk <= 46) || (vk >= 91 && vk <= 93) )
    kb.dwFlags = KEYEVENTF_EXTENDEDKEY;

kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;

SendInput(1, &Input, sizeof(Input));
kb.dwFlags |= KEYEVENTF_KEYUP;
SendInput(1, &Input, sizeof(Input));

最重要的是:问题可能不在此功能。我猜输入已发送,但错误的窗口。使用SetFocus函数指示此输入(在调用SendInput之前调用它)。

您还应该检查SendInput pinvoke.net