【问题标题】:SendInput not working for hold key C++SendInput 不适用于保持键 C++
【发布时间】:2012-05-15 00:22:04
【问题描述】:

我有这段代码,它使用 SendInput 发送按键,但是当我想长按一个键时它不起作用(例如长按'a'会在记事本中返回'aaaaaaaa')。

现在我已经查看了整个谷歌,我能看到解决这个问题的唯一方法是如果我想要长时间保持发送输入。我不想这样做,因为这只会模拟'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));

所以我想回答以下问题:

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

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

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

提前致谢! =)

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

【问题讨论】:

  • 这适用于 Windows 吗?你在用VC++吗?
  • 模拟它被多次按下有什么问题?我能想到的唯一需要区别的原因是......一个窗口。
  • 是的,它在 Windows 上。我只是使用带有 .cpp 文件结尾的普通 C++。如果它有所作为,我正在使用 MinGW 编译器! @Chris 这将用于控制游戏,因此最终会导致那个家伙急速前进谢谢=)
  • WM_KEYDOWN 上设置状态变量并在WM_KEYUP 上清除它。或者这不是你的游戏?
  • @chris 这不是我的游戏,如果是的话,这不是问题!在任何人说任何事情之前,先让我的 PSP 成为一个控制器,而不是这样我就可以创建一个 hack! :P

标签: c++ simulator keydown sendinput


【解决方案1】:

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

【讨论】:

  • hmmm... windows 如何限制一个字符的重复速度?它会忽略键盘发送给它的一些输入吗?
  • Windows 可以更改键盘控制器配置,它是双向连接。最明显的是控制面板中的键盘小程序。当您实际上不想使用键盘和假输入时,这无关紧要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2010-11-04
  • 2013-09-09
相关资源
最近更新 更多