【问题标题】:Record cursor movement记录光标移动
【发布时间】:2012-11-24 05:49:40
【问题描述】:

这更像是一个概念/实现问题,而不是特定的语言问题。

有人对光标移动记录有任何见解吗?
获取光标的当前位置非常容易,但是如何记录光标所跟随的路径呢?
(到可以以图形方式绘制的详细程度,而不会对所采用的路径产生歧义)

我想您可以在一小段时间后重复记录光标的当前位置,并将其全部记录下来以列出按时间顺序访问的坐标, 但我不确定录制应该多频繁(或可行);每 10 毫秒?
我什至没有遇到过如此短的睡眠时间达到必要精度的方法!

我还担心 CPU 使用率高时睡眠和录制的性能;当用户使用鼠标与密集型软件交互时。

我什至不完全确定光标的真正移动位置。 如果我将光标扫过屏幕,计算机(内部某处)是否承认我越过了所有这些像素, 还是我的鼠标真的告诉它“我在那里,现在我在这里,现在我在那里”。

我也寻求一种区分快速和慢速移动的方法,但现在,我只能观察访问坐标图上的绘图间距。

有人对此有任何见解吗? 任何潜在的陷阱;我的担忧合法吗? 我在这件事上走错了吗?

(可以观察到,我真的需要一些指导)

谢谢!

【问题讨论】:

  • 这个光标跟踪是打算在您自己的应用程序中进行,还是在整个系统中进行?另外,哪种系统?
  • 我自己的应用程序,但不是记录数据的应用程序。视窗 7

标签: cursor desktop-recording


【解决方案1】:

在同一个应用程序中记录鼠标移动要容易得多 - 只需在每条 WM_MOUSEMOVE 消息上记录一些内容。您将收到定期更新鼠标指针位置的消息。您不会为鼠标经过的每个像素收到WM_MOUSEMOVE 消息,但它会根据您移动鼠标的速度和系统的繁忙程度而跳跃。

在其他一些应用程序中记录鼠标移动会稍微复杂一些。如果您已经编写了记录器和正在记录的应用程序,那么您可以在正在记录的应用程序中处理WM_MOUSEMOVE,并向您的记录器应用程序发送相应的消息。您选择的 IPC;一个简单的SendMessage() 可能就足够了。

在整个系统中记录鼠标移动是一个完全不同的问题。您可能必须在更接近驱动程序级别的地方进行连接。

我只是想到了另一种方法——CBT (Computer-Based Training) hooks 旨在跨应用程序提供这种信息。不过我从来没有使用过这些,所以你必须做更多的调查。

【讨论】:

  • WM_MOUSEMOVE 消息发出的频率是否与计算机确认硬件移动的频率相同? (无论如何我认为它的频率是可以接受的)
  • 不,不在 Windows 中。发生的情况是硬件驱动程序向操作系统发送“嘿,鼠标移动了”信号,操作系统内部在鼠标当前所在的窗口上设置了一个标志,说“这个窗口需要鼠标移动更新”。稍后,当窗口的消息队列为空时,Windows 会查看“需要鼠标移动更新”标志,如果已设置,则生成一条带有最新位置的 WM_MOUSEMOVE 消息,然后清除该标志。因此,如果出于某种原因您认为需要获得比这更频繁的更新,那么您肯定会考虑驱动程序的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2021-11-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多