【问题标题】:record mouse movements, clicks and keyboard input with Java or C++使用 Java 或 C++ 记录鼠标移动、点击和键盘输入
【发布时间】:2011-01-15 01:04:53
【问题描述】:

我希望能够记录用户的鼠标移动、点击和键盘输入。如果是跨平台解决方案就好了。

我想取回这样的东西(伪代码):

鼠标移动到 500, 500 鼠标双击 鼠标移到 800, 300 鼠标左键单击 键盘输入“Hello World”

C++ 或 Java 是否有任何类可以做到这一点?如果我使用 C++,我可能会使用 QT 框架。

编辑:

我本来应该这么说的,但我想记录应用程序 gui 之外的动作和点击,所以也在桌面上。

【问题讨论】:

标签: java c++


【解决方案1】:

GLUT 执行此操作,但它与 OpenGL 相关联,这可能对您的项目来说太过分了。

OpenGL 是跨平台的。

【讨论】:

【解决方案2】:

我不相信有专门用于从窗口获取输入的跨平台工具包,但大多数工具包都提供了这种功能。两个不错的选择是:

  1. 使用 SDL,因为它相当轻量级并且可以处理简单的输入。
  2. 按平台本地实现功能,因为它在 X11、Windows、Mac OS X 等中应该是微不足道的。

【讨论】:

    【解决方案3】:

    在 Windows 上,这称为Journal Record Hook。你应该用 C 或 C++ 编写钩子部分,这在技术上可能在 java 中完成,但这不是一个好主意,你希望你的钩子过程具有尽可能少的依赖关系,并且尽可能快。系统范围的挂钩,尤其是日志会为键盘和鼠标输入增加很多开销,您希望尽可能减少影响。

    您通过使用SetWindowsHookEx 传递WH_JOURNALRECORD 来安装Windows 挂钩以获取日志记录挂钩。

    您也可以(也许)通过同时安装WH_KEYBOARD_LLWH_MOUSE_LL 来实现此功能,但是您的两个钩子程序将被分别调用,您必须编写自己的代码来按顺序排列事件。

    我怀疑你会找到一个跨平台的解决方案。

    【讨论】:

      【解决方案4】:

      听起来 Qt 可能允许您实现从应用程序扩展到窗口系统的事件过滤器。另见Qt - top level widget with keyboard and mouse event transparency?

      【讨论】:

        【解决方案5】:

        如果您想在整个 GUI 系统中捕获事件,而不仅仅是一个应用程序,那么跨平台解决方案的可能性不大。但是,事件挂钩部分可以很容易地与记录部分分开,因此您可以使大部分程序跨平台。

        对于 Windows,you need this 17 year old (!) document。 (伙计,我老了!)

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多