отправка одновременных событий клавиатуры с 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);
}

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

2

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]