SendInput 不适用于按住键 C++

gee*_*n92 5 c++ simulator keydown sendinput

我有一段代码,它使用 SendInput 发送按键,但当我想长时间按住某个键时它不起作用(例如,长时间按住“a”会在记事本中返回“aaaaaaaaa”)。

现在我已经查遍了谷歌,我能看到解决这个问题的唯一方法是如果我想要长时间保留,则继续发送输入。我不想这样做,因为这只会模拟“a”被一遍又一遍地按下。

keyboard.wVk = 0;
keyboard.wScan = MapVirtualKey(key, 0);

keyboard.dwFlags = KEYEVENTF_SCANCODE;

if (index_vector_no)
    pressed[index_vector_no] = true;

keyboard.dwExtraInfo = 0;

input.type = INPUT_KEYBOARD;
input.ki = keyboard;

SendInput(1, &input, sizeof (input));
Run Code Online (Sandbox Code Playgroud)

所以我想知道以下问题的一些答案:

A)我是否正确地认为使用 SendInput 没有办法解决这个问题,为什么它不能长时间保持?

B) 成功发送按键按下和按键抬起信号的替代方法是什么?最好将密钥发送到窗口,而不仅仅是发送到特定的应用程序。

C) 是否有一个好的轻量级 C++ 库可以用来处理全局键盘和鼠标模拟?

提前致谢!=)

编辑:看看这篇文章以了解我的问题的更多详细信息:http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20833788.html

Han*_*ant 5

重复击键是键盘控制器的一项功能,而不是 Windows 或 SendInput 的一项功能。您当然可以使用计时器来模拟它,重复调用 SendInput()。