C++GetAsyncKeyState和GetCursorPos与Windows消息传递的比较

C++ GetAsyncKeyState and GetCursorPos vs Windows Messaging

本文关键字:消息传递 比较 Windows GetCursorPos C++GetAsyncKeyState      更新时间:2023-10-16

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

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

在最近的Windows版本中,还有一种更新的异步输入捕获技术,我现在记不起它的名字了。谷歌也会这样做。

编辑:

我现在记得了:另一种技术被称为事件挂钩。请参阅SetWinEventHook函数。

GetAsyncKeyState和GetCursorPos是您的最佳选择。代码越简单,你的程序就越快。考虑到通过SendMessage()等函数发送窗口消息可以让你选择处理不同程序的许多不同方面,这通常意味着SendMessage()函数内部有更多的进程,并且为了给其他应用程序提供实用性,速度被降低了。

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

摘要:使用GetAsyncKeyState和GetCursorPos的优点:您不会发现任何函数检索数据的速度比这些函数快,因为它们只是用于执行小型基本任务的函数。SendMessage类型的函数会稍微慢一点,因为它们内部有更多的编码,使它们能够处理的不仅仅是鼠标和键盘功能。

缺点。。。我真的没看到。