C ++ GetAsyncKeyState和GetCursorPos vs Windows Messaging

时间:2014-09-02 23:54:12

标签: c++ windows input

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

2 个答案:

答案 0 :(得分:1)

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

在最近的Windows版本中,还有一种更新的异步输入捕获技术可用,其名称目前无法使用。谷歌也是如此。

编辑:

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

答案 1 :(得分:0)

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

我还想指出,由于您实际上是从源计算机收集数据,将其传递到阵列并在线发送,因此您永远无法获得完美的计时。

要点: 使用GetAsyncKeyState和GetCursorPos的优点: 您将找不到比这些函数更快地检索数据的任何函数,因为它们只是执行小型基本任务的函数。 SendMessage类型的函数会稍慢,因为它们内部有更多的编码,使它们不仅可以使用鼠标和键盘功能。

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