2010-02-09 33 views
5

我希望能够记录用户的鼠标移动,点击和键盘输入。如果它是一个跨平台的解决方案,那将会很棒。用Java或C++记录鼠标移动,点击和键盘输入

我想找回这样的(伪代码):

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

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

编辑:

我应该说本来这个,但我想记录的移动和点击应用程序的GUI之外,因此在桌面上了。

+2

您是否需要记录系统范围内的输入或仅在您的应用程序的主窗口中? – finnw

+0

看到这个类似的问题:http://stackoverflow.com/questions/2147903/retrieve-window-handle-and-press-button-programatically – lsalamon

+1

这是问题是为c# – Joe

回答

0

GLUT这样做,但它与OpenGL绑定,这可能是你的项目矫枉过正。

OpenGL是跨平台的。

+0

或freeglut(http://freeglut.sourceforge.net /),与10年前废弃的GLUT不同,GLUT积极维护 – Manuel

0

我不认为有一个跨平台工具包专门用于从窗口中获取输入,但绝大多数工具包都提供此功能。有两个很好的选择:

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

如果你想陷阱在整个GUI系统的事件,不只是一个应用程序,有跨平台解决方案的可能性不大。但是,事件挂钩部分可以很容易地从录制部分分离,因此您可以使程序的大部分跨平台。

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

+0

http://msdn.microsoft.com/en-us/library/ms997537.aspx:“*此内容已被删除。”*“ –

+1

@Martin - 更新的链接去通过www.archive.org –

0

在Windows上,这叫做Journal Record Hook。你应该用C或C++编写钩子部分,在java中做技术上可能是可行的,但这不是一个好主意,你希望你的钩子程序拥有尽可能少的依赖性,并尽可能快。系统广泛的钩子,尤其是日志会给键盘和鼠标输入增加很多开销,您希望尽可能地减小您的影响。

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

你也可以通过安装WH_KEYBOARD_LLWH_MOUSE_LL来获得这个工作,但是你的两个钩子程序将被单独调用,你将不得不编写自己的代码来按顺序排列事件。

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