C++GetAsyncKeyState和GetCursorPos与Windows消息传递的比较
C++ GetAsyncKeyState and GetCursorPos vs Windows Messaging
我正在开发一个涉及远程控制的应用程序。键盘和鼠标的状态每秒更新约100次,保存在阵列上,发送到互联网上,然后复制。需要完美的再现时机。从现在起,我只对键盘部分进行了编码,实际上它比windows消息更容易编程。我所要做的就是在主机上每9毫秒调用一次GetAsyncKeystate,然后在客户端上,每9毫秒使用一次SendInput以获得完美的计时。另一方面,我必须手动检查主机窗口是否高亮显示,如果没有,请避免调用GetAsyncKeyState。但现在我要编写鼠标部分的代码了,我不知道该用什么方法,因为即使没有窗口消息,鼠标的完美时机也很难实现。这就是为什么我要求比我更有经验的程序员:在这种情况下,是使用GetAsyncKeyState和GetCursorPos的组合更好,还是使用Windows消息更好?两者的积极因素和消极因素是什么?提前谢谢。
您需要使用Windows挂钩。请参阅SetWindowsHookEx和相关文档。这也可以用于键盘事件。
在最近的Windows版本中,还有一种更新的异步输入捕获技术,我现在记不起它的名字了。谷歌也会这样做。
编辑:
我现在记得了:另一种技术被称为事件挂钩。请参阅SetWinEventHook函数。
GetAsyncKeyState和GetCursorPos是您的最佳选择。代码越简单,你的程序就越快。考虑到通过SendMessage()等函数发送窗口消息可以让你选择处理不同程序的许多不同方面,这通常意味着SendMessage()函数内部有更多的进程,并且为了给其他应用程序提供实用性,速度被降低了。
我还想指出的是,您永远无法获得完美的时机,因为您实际上是在从源计算机收集数据,将其传递到阵列并在线发送。
摘要:使用GetAsyncKeyState和GetCursorPos的优点:您不会发现任何函数检索数据的速度比这些函数快,因为它们只是用于执行小型基本任务的函数。SendMessage类型的函数会稍微慢一点,因为它们内部有更多的编码,使它们能够处理的不仅仅是鼠标和键盘功能。
缺点。。。我真的没看到。
- Libmosquitto publish 不会将所有消息传递到 Azure IoT Hub
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- "Guaranteed Delivery"消息传递 - 我应该使用 MQTT 还是 ZeroMQ?
- 核心消息传递中未处理的异常.dll在程序关闭期间
- Microsoft具有本机消息传递和非持久连接的边缘扩展不起作用
- Firebase C 云消息传递背景问题
- 从客户端到浏览器的CEF中的消息传递序列化
- 我们是否可以使用 FireBase 云消息传递来发送或接收消息,或者在 Windows 桌面/控制台或 Linux 控制
- 如何将WM_KEYDOWN消息传递到 IWebBrowser2 实例
- 如何在 GNU Radio 中实现消息传递
- msgpack:C++和Java之间的消息传递
- 增强ASIO和线程之间的消息传递
- 交流时Chrome本机消息传递错误
- 多线程C++消息传递
- 跨平台最佳 MVC 模型到控制器消息传递方法(C#、Objective-C++)
- 如何在Chrome原生消息传递扩展的本机应用程序中使用本机主机消息
- 移动窗口(),跳过,躲避或绕过消息传递
- 无效输入会导致多语言 JSON 消息传递系统中的身份验证绕过
- C++GetAsyncKeyState和GetCursorPos与Windows消息传递的比较