Java - 关键捕手

时间:2012-05-31 14:27:06

标签: java keyboard key keylogger

我正在尝试用Java创建一种键盘记录器。我有一个应用程序,允许人们在他们的桌面上获取他们的RSS源,我想快速访问。 顺便说一下,我需要一些能做到这一点的东西:

  • 我启动了我的java jar文件,它在系统托盘中最小化。
  • 用户做他想做的事(冲浪,看电影等......)。
  • 他按下一个组合键(CTRL + I),然后打开java窗口并显示一个GUI,他可以在其中检查新闻并修改应用程序配置。
  • 现在他可以最小化窗口(系统托盘图标)并继续正常使用他的计算机。

我的应用必须完全跨平台。除此功能外,所有事情都已完成。 我已尝试使用KeyStroke甚至System.in来执行此操作,但只有当用户将窗口设置为活动时,它们才会捕获组合键。

那么,有没有办法在不使用JNI或JNA的情况下从应用程序外部(如透明叠加层)捕获关键组合(这就是我的搜索给我的)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这不可能。在当今世界,没有任何操作系统可以让你只记录所有击键

答案 1 :(得分:0)

不,你必须放弃一些系统相关的库,即使用某种形式的JNI。

不同的内置粒度级别为:

  

WHEN_ANCESTOR_OF_FOCUSED_COMPONENT

     

用于registerKeyboardAction的常量,表示当接收组件是焦点组件的祖先或者它本身就是焦点组件时,应该调用该命令。

     

WHEN_FOCUSED

     

用于registerKeyboardAction的常量,表示当组件具有焦点时应调用该命令。

     

WHEN_IN_FOCUSED_WINDOW

     

用于registerKeyboardAction的常量,表示当接收组件位于具有焦点的窗口中或者本身是焦点组件时,应该调用该命令