发送输入不发送字符或数字

SendInput doesn't send chars or numbers

本文关键字:数字 输入 字符      更新时间:2023-10-16

我有这样的东西:

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锁切换。

为什么我不能向应用程序发送字符或数字?

注意,我使用的是带有波兰键盘布局的Windows7和带有MinGW的Qt。

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之前先调用它)。

您还应该检查SendInputpinvoke.net