我正在研究涉及远程控制的应用程序。键盘和鼠标状态每秒更新约100次,保存在阵列上,在互联网上发送并进行复制。完美的播放时机是必需的。从现在开始,我只编写了键盘部分,实际上它比Windows消息传递更容易编程。我所要做的就是在主机上每9毫秒调用一次GetAsyncKeystate,然后在客户端上每9毫秒使用一次SendInput来获得完美的时序。勋章的另一面是,我将不得不手动检查主窗口是否突出显示,如果不是,请避免调用GetAsyncKeyState。但是现在我要编码鼠标部分,我对使用什么方法有疑问,因为即使没有窗口消息,鼠标的完美时间也很难实现。这就是为什么我要问那些比我更有经验的程序员: 在这种情况下,使用GetAsyncKeyState和GetCursorPos的组合还是使用Windows Messaging更好?两者的积极和消极之处是什么?提前致谢。C++ GetAsyncKeyState和GetCursorPos与Windows消息传递
回答
你会想要使用Windows挂钩。请参阅SetWindowsHookEx和相关文档。这也可以用于键盘事件。
在最近的Windows版本中,还有一个更新的异步输入捕获技术,目前这个技术的名字让我不知所措。谷歌也是如此。
编辑:
我记得现在:其他技术被称为事件挂钩。请参阅SetWinEventHook函数。
GetAsyncKeyState和GetCursorPos是您的最佳选择。代码越简单,你的程序就能够越快。考虑到通过像SendMessage()这样的函数发送Windows消息可以让你选择不同程序的许多不同方面,这通常意味着SendMessage()函数内部会发生更多进程,并且速度会按顺序排除为其他应用程序提供实用性。
我也想指出,你将永远无法获得完美的时机,因为你事实上是从源计算机收集数据,将它传递给一个数组并将它发送到在线。
摘要:利用GetAsyncKeyState和GetCursorPos的 优点: 你不会找到检索数据比因为他们的功能,只有期待做小的基本任务这些功能更快的任何功能。 SendMessage类型的函数会稍微慢一些,因为它们内部有更多的编码,使得它们不仅仅能够使用鼠标和键盘功能。
缺点...我真的没有看到任何。
钩子和自定义设备驱动程序将比轮询GeyAsyncKeyState和GetCursorPos更快。 – 2014-09-03 00:32:40
- 1. 浏览器和Windows消息传递
- 2. 消息队列与消息传递
- 3. C#即时消息传递
- 4. 消息传递与boost :: threads?
- 5. 消息传递与锁定
- 6. Windows上的消息传递接口(MPI)
- 7. WPF和Win32消息传递
- 8. windows-ce中有哪些消息传递技术可以保证消息传递?
- 9. 针对windows phone的云消息传递
- 10. 扩展Windows 8消息传递中心
- 11. 互操作性的Windows消息传递?
- 12. Windows窗体+ CrossThread消息传递异常
- 13. C++和GetAsyncKeyState()函数
- 14. C++ GetCursorPos问题
- 15. Android消息传递
- 16. ServiceStack Redis消息传递 - 即时消息?
- 17. 寻找一个类似于GetAsyncKeyState或GetCursorPos的功能
- 18. msgpack:C++和java之间的消息传递
- 19. Node.js和MPI(消息传递接口)
- 20. C中的Firebase云消息传递#
- 21. C++消息传递的疑惑
- 22. 多线程C++消息传递
- 23. 消息传递在C++函数
- 24. C#传递布尔值作为消息
- 25. 将消息从C传递给erlang
- 26. 将消息传递给C++调用者
- 27. C++消息像MPI一样传递库
- 28. C#通过串口传递消息
- 29. 消息传递与observable不起作用
- 30. 谷歌与CCS的云消息传递
如果用户按下两个小于9ms的键,该怎么办?你不会知道首先发送哪一个。这对于转换+信件很重要。 – 2014-09-03 00:38:51
他们将按此顺序发送(从上到下)http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 无论如何,你描述的情况很少见,因为用户在少于9毫秒内很少击中两个键,而应用程序是为游戏而设计的。 – Alex 2014-09-03 01:00:43
我认为视频游戏就是这种情况,最有可能的是快速连续按下多个按键。他们被按下的顺序可能很重要。 – 2014-09-03 02:11:20