Java设置全局热键——第三方包jintellitype实现

  Java原生API并不支持为应用程序设置全局热键。要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难。不过幸好,国外有人已经实现了,发布成第三方java包,借此,我们可以很方便的设置全局热键而不用编写任何C/C++代码。

  jintellitype官网貌似目前访问不到,这里提供下载:http://pan.baidu.com/s/1kTIDxgN

  我实现的演示Demo源码下载:http://pan.baidu.com/s/1c0nJ8OC

  jintellitype由两部分组成,一部分是java写的jintellityp的jar文件,另一部分是C/C++写的已编译好的dll文件,有两个dll文件,分别是32位和64位系统的。在我使用jintellitype的过程中,把jintellitype的jar文件Build进项目后,不知道dll文件放哪,我试着运行,根据错误提示,原来需要把dll文件放到项目com.melloware.jintellitype包下。建议同时把两个dll文件都加进去,这样,你的程序就可以同时兼容32位和64位系统,而你不需要任何额外的处理。

  贴上我的小demo代码:

 1 package com.jebysun.globlehotkey;
 2
 3 import java.awt.Insets;
 4 import java.awt.event.ActionEvent;
 5 import java.awt.event.ActionListener;
 6
 7 import javax.swing.JButton;
 8 import javax.swing.JFrame;
 9 import javax.swing.JOptionPane;
10
11 import com.melloware.jintellitype.HotkeyListener;
12 import com.melloware.jintellitype.JIntellitype;
13
14 /**
15  * 利用JIntellitype实现全局热键设置
16  * @author Jeby Sun
17  *
18  */
19 public class GlobleHotKeyDemo extends JFrame {
20
21     private static final long serialVersionUID = 1L;
22
23     //定义热键标识,用于在设置多个热键时,在事件处理中区分用户按下的热键
24     public static final int FUNC_KEY_MARK = 1;
25     public static final int EXIT_KEY_MARK = 0;
26
27     JButton msgBtn;
28     JButton exitBtn;
29
30     public GlobleHotKeyDemo() {
31         this.setTitle("全局热键设置");
32         this.setBounds(100, 100, 600, 400);
33         this.setLayout(null);
34         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
35
36         msgBtn = new JButton("弹出框(Alt+S)");
37         //设置按钮边距
38         msgBtn.setMargin(new Insets(0,0,0,0));
39         msgBtn.setFocusable(false);
40         msgBtn.setBounds(20, 20, 120, 30);
41         msgBtn.addActionListener(new ActionListener() {
42             @Override
43             public void actionPerformed(ActionEvent e) {
44                 showMessage();
45             }
46         });
47         this.add(msgBtn);
48
49         exitBtn = new JButton("退出(Alt+Q)");
50         exitBtn.setMargin(new Insets(0,0,0,0));
51         exitBtn.setFocusable(false);
52         exitBtn.setBounds(160, 20, 120, 30);
53         exitBtn.addActionListener(new ActionListener() {
54             @Override
55             public void actionPerformed(ActionEvent e) {
56                 System.exit(0);
57             }
58         });
59         this.add(exitBtn);
60
61         //第一步:注册热键,第一个参数表示该热键的标识,第二个参数表示组合键,如果没有则为0,第三个参数为定义的主要热键
62         JIntellitype.getInstance().registerHotKey(FUNC_KEY_MARK, JIntellitype.MOD_ALT, (int)‘S‘);
63         JIntellitype.getInstance().registerHotKey(EXIT_KEY_MARK, JIntellitype.MOD_ALT, (int)‘Q‘);
64
65         //第二步:添加热键监听器
66         JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
67
68             @Override
69             public void onHotKey(int markCode) {
70                 switch (markCode) {
71                 case FUNC_KEY_MARK:
72                     showMessage();
73                     break;
74                 case EXIT_KEY_MARK:
75                     System.exit(0);
76                     break;
77                 }
78             }
79         });
80
81         this.setVisible(true);
82     }
83
84     public void showMessage() {
85         JOptionPane.showMessageDialog(null, "就算把窗口最小化,按快捷键Alt+S也可以弹出提示框哦!", "弹出框标题", JOptionPane.INFORMATION_MESSAGE);
86     }
87
88
89
90     public static void main(String[] args) {
91         new GlobleHotKeyDemo();
92     }
93 }

其实,jintellitype的使用非常简单,就3个步骤:

第一步:添加jar包和dll文件;

第二步:注册热键;

第三步:添加热键监听器,实现接口的方法;

  

时间: 2024-08-24 09:38:13

Java设置全局热键——第三方包jintellitype实现的相关文章

C# 全局热键设置 与 窗体热键设置

1. 窗体热键 首先要设置主窗体KeyPreview为true,可直接在属性中进行设置, 或者在窗体加载中设置: this.KeyPreview = true; 然后添加窗体KeyDown事件,如下: private void FrmMain_KeyDown(object sender, KeyEventArgs e) { if (e.Alt && e.Shift && e.Control && e.KeyCode == Keys.S) { MessageB

使用javax.script包实现Java设置JS脚本中的变量

下面例子中,我们通过javax.script包ScriptEngine.put()方法设置JS脚本中的变量,JS把所有在线用户输出. package ajava.code.javase; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; import java.util.Date; public class AjavaAcc

Jython:java调用python文件之第三方包路径问题

本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过安装jython的方式将python代码嵌入java工程 1. Jython如何安装 下载地址:jython_installer-2.5.0.jar.下载需要积分,如果无积分,可联系楼主. 傻瓜式下一步安装方式,路径最好和工程选在同一目录下. 2. 运行python代码 举个简单例子,安装好java环境及eclipse之后,copy如下代码即可运行.注释部分为运行文件的方式,需要新建文件后去掉注释执行. impor

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入库,需要带main()主函数: 情况2:向程序传参数,并且程序没有使用第三方jar包 这种情形下打包和情况1是一样的 情况3:程序使用了第三方jar包 这种情况下的打包要复杂一些,需要把第三方jar包一起导出,可以使用eclipse的插件fat jar,很简便,但是fat jar只支持eclipse

【使用JBoss 7开发Java EE 6】EJB引用第三方包

在EJB里引用了第三方包后,必须在JBoss里进行这个包的配置,否则项目肯定会部署失败. 在JBoss7以前的版本里,这些第三包可以放到%JBOSS_HOME%/common/lib下面,但JBoss 7与以前的版本完全不同了.JBoss 7里使用的是模块加载,第三方Jar包也会当成模块来加载,所以需要在JBoss 7里对第三方Jar包进行配置. 配置分为两个步骤,一个是在modules这个文件夹里以包层次作为文件夹名,最后一级是版本号,没有则为main,如示例: package calcula

java fastjson 设置全局输出name最小化

1.通过自定义Filter实现 https://github.com/alibaba/fastjson/wiki/SerializeFilter public class JackJsonLowCaseFilter implements NameFilter { public JackJsonLowCaseFilter() { } @Override public String process(Object source, String name, Object value) { if (nam

Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached的区别)

Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官方下载:http://redis.io/download 可以根据需要下载不同版本 windows版:https://github.com/MSOpenTech/redis github的资源可以ZIP直接下载的(这个是给不知道的同学友情提示下) 下载完成后 可以右键解压到 某个硬盘下 比如D:\R

Java Service Wrapper将jar包安装成Windows服务

刚接触java,第一次使用Java开发windows服务,也是刚不久看了SSM框架 简直也是一头雾水,不过只要用心理解,其实很简单,下面有详细的步骤,包学包会 在windows上运行jar包,需要在工作目录下使用命令行运行jar包,这样会出现一个命令行窗口 而且这个命令行窗口有可能会不小心被关闭,且服务器启动后需要人为去点击开启 对于有些服务性的程序来说,我们需要将其部署为windows服务,在系统启动的时候自动启动 后来研究了两种方式: 1.使用 JavaService.exe 安装jar包

解决eclipse中自带的maven搜索不到非本地第三方包问题

最近使用eclipse中的maven插件时发现,在pom.xml文件中添加第三方包时,查询不到非本地的jar包,感到格外不方便,也感到非常困惑.我记得在早期的eclipse版本中是自己安装maven插件,不存在该问题,于是就花费了半个小时时间来研究了下,结果发现,eclipse自带的插件,默认不会将第三方包索引下载到本地,所以就搜索不到了,按如下方法就可以下载并使用了 1. 打开windows -> preferences -> maven,勾选如图所示 2.  打开 windows ->