отправка одновременных событий клавиатуры с помощью SendInput в окнах на С++

Я хочу имитировать нажатия клавиш на C++ с помощью SendInput, в то время как отдельные кнопки работают, попытка одновременной отправки клавиш (сочетания клавиш) не работает.

Я пробовал все, но ничего не работает, если я отправляю только VK_LWIN, он появляется, но не может одновременно комбинировать ключи.

вот мой код:

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

void setInput(INPUT * inp,uint index, WORD keycode,BOOL kUp);
void showRun();

int main(void)
{
    showRun();
    return 0;
}

void setInput(INPUT * inp,uint index, WORD keycode,BOOL kUp)
{
    inp[index].type = INPUT_KEYBOARD;
    inp[index].ki.wVk = keycode;
    inp[index].ki.wScan = MapVirtualKey(keycode, 0);
    inp[index].ki.time = 0;
    inp[index].ki.dwExtraInfo = 0;

    if (kUp == 1)
    {
        inp[index].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY;
    }else
    {
        inp[index].ki.dwFlags =  0 | KEYEVENTF_EXTENDEDKEY;
    }
}

//this doesn't do anything
void showRun()
{
    INPUT *inp = (INPUT*) malloc(sizeof(INPUT) * 4);
    memset(inp,0,sizeof(INPUT));

    setInput(inp,0,VK_LWIN,0);
    setInput(inp,1,VK_RBUTTON,0);
    setInput(inp,2,VK_RBUTTON,1);
    setInput(inp,3,VK_LWIN,1);

    SendInput(4,inp,sizeof(INPUT));

    free(inp);
}

пока это работает нормально:

void showStart()
{
    INPUT *inp = (INPUT*) malloc(sizeof(INPUT) * 2);
    memset(inp,0,sizeof(INPUT));

    setInput(inp,0,VK_LWIN,0);
    setInput(inp,1,VK_LWIN,1);

    SendInput(2,inp,sizeof(INPUT));

    free(inp);
}

Заранее спасибо за любой совет.


person Ammarz    schedule 11.11.2012    source источник
comment
VK_RBUTTON — правая кнопка мыши.   -  person chris    schedule 12.11.2012
comment
Примечание: поскольку вы отправляете фиксированное количество ключей, нет необходимости динамически распределять ваши входные данные, просто сделайте свой массив локальным.   -  person Jeff Mercado    schedule 12.11.2012
comment
@chris, благодаря тебе я понял свою ошибку!   -  person Ammarz    schedule 12.11.2012
comment
@JeffMercado это был просто тест, код должен быть динамическим и принимать команды откуда-то еще.   -  person Ammarz    schedule 12.11.2012


Ответы (1)


Ах, глупый я, я должен был использовать VkKeyScan ('r'), а не VK_RBUTTON, теперь это работает!

person Ammarz    schedule 11.11.2012