在Windows/Linux/Mac上的Java程序中如何对全局热键做出反应?

22

一个Java6应用程序位于系统托盘中。它需要使用热键(例如Super-G或Ctrl-Shift-L等)进行激活并执行某些操作(例如显示输入框)。

我该如何在以下操作系统上实现:

  • Windows(XP或Vista)
  • OS / X
  • Linux(Gnome或KDE)
(未做修改,保留原有格式)

Spehan:你在OSX上搞定了吗? - OscarRyz
6个回答

25

我使用JNA为Java编写了一个全局热键库,目前支持Windows、Linux和Mac OSX操作系统,还支持Windows和Linux上的媒体按键。

如果有人感兴趣,请尝试访问https://github.com/tulskiy/jkeymaster

我会非常感谢任何反馈意见。

谢谢。


不再工作(Windows 10,最近的 JNA 版本) - user1050755

7

2
更新:我已经开始开发自己的跨平台全局热键库,名为OsSupport。我已经将代码上传到BitBucket,并使用Apache 2.0许可证:https://bitbucket.org/agynamix/ossupport-connector。目前,由于Windows和Linux存在其他现有解决方案,因此OsSupport仅支持Mac。但是,该库旨在跨平台,并且还支持除热键之外的其他功能。例如,OsSupport可以向系统发送按键事件以模拟按键。 - Torsten Uhlmann
2
Torsten,有没有兴趣将Windows Jintellitype代码合并进来?我是那个代码的作者,很希望看到一个统一的库,包括Linux、Windows和Mac。 - Melloware
谢谢Torsten!但是我不知道如何在Mac上使用它。你能提供一个Readme或者其他什么东西吗?我主要想捕获媒体键。 - Stelian Iancu

6
似乎在不使用本地接口的情况下,这是无法以跨平台方式实现的。
在Windows上,您可以使用免费的JIntellitype库。

5
如果有人想要做JIntellitype JNI部分的OSX或Linux版本,我将非常乐意将其添加到JIntellitype库中。

http://www.melloware.com


1

我发现this解决方案在Windows上非常好用。它不需要你安装像JIntelliType这样的任何软件。请注意,这是一个32位的dll文件,如果需要的话,你可以重新编译为64位的JVM。感谢博客原作者的贡献。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接