2014-09-02 86 views
0

我正在研究涉及远程控制的应用程序。键盘和鼠标状态每秒更新约100次,保存在阵列上,在互联网上发送并进行复制。完美的播放时机是必需的。从现在开始,我只编写了键盘部分,实际上它比Windows消息传递更容易编程。我所要做的就是在主机上每9毫秒调用一次GetAsyncKeystate,然后在客户端上每9毫秒使用一次SendInput来获得完美的时序。勋章的另一面是,我将不得不手动检查主窗口是否突出显示,如果不是,请避免调用GetAsyncKeyState。但是现在我要编码鼠标部分,我对使用什么方法有疑问,因为即使没有窗口消息,鼠标的完美时间也很难实现。这就是为什么我要问那些比我更有经验的程序员: 在这种情况下,使用GetAsyncKeyState和GetCursorPos的组合还是使用Windows Messaging更好?两者的积极和消极之处是什么?提前致谢。C++ GetAsyncKeyState和GetCursorPos与Windows消息传递

+0

如果用户按下两个小于9ms的键,该怎么办?你不会知道首先发送哪一个。这对于转换+信件很重要。 – 2014-09-03 00:38:51

+0

他们将按此顺序发送(从上到下)http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 无论如何,你描述的情况很少见,因为用户在少于9毫秒内很少击中两个键,而应用程序是为游戏而设计的。 – Alex 2014-09-03 01:00:43

+0

我认为视频游戏就是这种情况,最有可能的是快速连续按下多个按键。他们被按下的顺序可能很重要。 – 2014-09-03 02:11:20

回答

1

你会想要使用Windows挂钩。请参阅SetWindowsHookEx和相关文档。这也可以用于键盘事件。

在最近的Windows版本中,还有一个更新的异步输入捕获技术,目前这个技术的名字让我不知所措。谷歌也是如此。

编辑:

我记得现在:其他技术被称为事件挂钩。请参阅SetWinEventHook函数。

0

GetAsyncKeyState和GetCursorPos是您的最佳选择。代码越简单,你的程序就能够越快。考虑到通过像SendMessage()这样的函数发送Windows消息可以让你选择不同程序的许多不同方面,这通常意味着SendMessage()函数内部会发生更多进程,并且速度会按顺序排除为其他应用程序提供实用性。

我也想指出,你将永远无法获得完美的时机,因为你事实上是从源计算机收集数据,将它传递给一个数组并将它发送到在线。

摘要:利用GetAsyncKeyState和GetCursorPos的 优点: 你不会找到检索数据比因为他们的功能,只有期待做小的基本任务这些功能更快的任何功能。 SendMessage类型的函数会稍微慢一些,因为它们内部有更多的编码,使得它们不仅仅能够使用鼠标和键盘功能。

缺点...我真的没有看到任何。

+1

钩子和自定义设备驱动程序将比轮询GeyAsyncKeyState和GetCursorPos更快。 – 2014-09-03 00:32:40