使用Java或C ++记录鼠标移动,点击和键盘输入

时间:2010-02-09 22:56:42

标签: java c++

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

我想得到这样的东西(伪代码):

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

C ++或Java是否有任何可以执行此操作的类?如果我使用的是C ++,我可能会使用QT框架。

编辑:

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

5 个答案:

答案 0 :(得分:0)

GLUT这样做,但它与OpenGL相关,这可能对你的项目来说太过分了。

OpenGL是跨平台的。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在Windows上,这称为Journal Record Hook。你应该用C或C ++编写钩子部分,在技术上可能在java中做,但这不是一个好主意,你希望你的钩子程序尽可能少的依赖,并尽可能快。系统范围的钩子,特别是日志为键盘和鼠标输入增加了很多开销,你想尽可能地减小你的影响。

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

您也可以(可能)通过安装WH_KEYBOARD_LLWH_MOUSE_LL来实现这一点,但是您的两个钩子程序将被单独调用,并且您必须编写自己的代码来放置事件按顺序。

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

答案 4 :(得分:0)

听起来Qt可能允许您实现超出应用程序范围的事件过滤器到窗口系统。另请参阅Qt - top level widget with keyboard and mouse event transparency?