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代码:
package com.jebysun.globlehotkey; import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane; import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype; /**
* 利用JIntellitype实现全局热键设置
* @author Jeby Sun
*
*/
public class GlobleHotKeyDemo extends JFrame { private static final long serialVersionUID = 1L; //定义热键标识,用于在设置多个热键时,在事件处理中区分用户按下的热键
public static final int FUNC_KEY_MARK = 1;
public static final int EXIT_KEY_MARK = 0; JButton msgBtn;
JButton exitBtn; public GlobleHotKeyDemo() {
this.setTitle("全局热键设置");
this.setBounds(100, 100, 600, 400);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); msgBtn = new JButton("弹出框(Alt+S)");
//设置按钮边距
msgBtn.setMargin(new Insets(0,0,0,0));
msgBtn.setFocusable(false);
msgBtn.setBounds(20, 20, 120, 30);
msgBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showMessage();
}
});
this.add(msgBtn); exitBtn = new JButton("退出(Alt+Q)");
exitBtn.setMargin(new Insets(0,0,0,0));
exitBtn.setFocusable(false);
exitBtn.setBounds(160, 20, 120, 30);
exitBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.add(exitBtn); //第一步:注册热键,第一个参数表示该热键的标识,第二个参数表示组合键,如果没有则为0,第三个参数为定义的主要热键
JIntellitype.getInstance().registerHotKey(FUNC_KEY_MARK, JIntellitype.MOD_ALT, (int)'S');
JIntellitype.getInstance().registerHotKey(EXIT_KEY_MARK, JIntellitype.MOD_ALT, (int)'Q'); //第二步:添加热键监听器
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() { @Override
public void onHotKey(int markCode) {
switch (markCode) {
case FUNC_KEY_MARK:
showMessage();
break;
case EXIT_KEY_MARK:
System.exit(0);
break;
}
}
}); this.setVisible(true);
} public void showMessage() {
JOptionPane.showMessageDialog(null, "就算把窗口最小化,按快捷键Alt+S也可以弹出提示框哦!", "弹出框标题", JOptionPane.INFORMATION_MESSAGE);
} public static void main(String[] args) {
new GlobleHotKeyDemo();
}
}
其实,jintellitype的使用非常简单,就3个步骤:
第一步:添加jar包和dll文件;
第二步:注册热键;
第三步:添加热键监听器,实现接口的方法;
Java设置全局热键——第三方包jintellitype实现的更多相关文章
- 第三方包jintellitype实现Java设置全局热键
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...
- Qt5全局热键第三方库qxtglobalshortcut5使用
1.下载第三方库https://github.com/ddqd/qxtglobalshortcut5. 2.把qxtglobalshortcut5文件放在项目目录下,在项目.pro加入一句,inclu ...
- 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...
- java调用第三方包的例子
第三方包路径 D:\jp\log4j\log4j-1.2.16.jar 代码D:\jp\log4j\Log4jDemo.java import org.apache.log4j.*; public c ...
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- Jython:java调用python文件之第三方包路径问题
本文转载自:http://blog.csdn.net/ztf312/article/details/51338060 本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过 ...
- java fastjson 设置全局输出name最小化
1.通过自定义Filter实现 https://github.com/alibaba/fastjson/wiki/SerializeFilter public class JackJsonLowCas ...
- Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)
Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...
- 笔记——malloc、free、不同数据类型操作、.pyc文件、python安装第三方包、验证一个网站的所有链接有效性
C — malloc( ) and free( ) C 语言中使用malloc( )函数申请的内存空间,为什么一定要使用free释放? **malloc()函数功能:是从堆区申请一段连续的空间,函数结 ...
随机推荐
- storm ——Understanding the Parallelism of a Storm Topology
http://www.michael-noll.com/blog/2012/10/16/understanding-the-parallelism-of-a-storm-topology/ 这篇文章好 ...
- 014 DNS
解析主机名 Router>en Password: Router#config t Enter configuration commands, one per line. End with C ...
- C++开发人脸性别识别教程(16)——视频人脸性别识别
在之前的博文中我们已经可以顺利驱动摄像头来採集源图像.在这篇博文中将正式为其加入性别识别的代码,实现摄像头视频的人脸性别识别. 一.人脸检測 在得到摄像头採集的源图像之后,首先要做的就是对其进行人脸检 ...
- ubuntu系统下,下载Android源码
博主电脑的Windows的 是用的vmware装的ubuntu kylin.vmware随便找都能找到尽量安装最新版本号的,而unbuntu在官方站点下载即可了,安装vmware的时候建议关闭安全类 ...
- Android 网络学习之获取server文本文件
上次我们学习怎样从网络上获取一张图片,今天我们学习怎样从网络上获取文本文件.以XML文件为样例. 由于XML文件在实际开发中最为常见. 我们以以下图片为样例学习怎样从网络上获取XML文件 我们的xml ...
- Appro DM8127 IPNC 挂载NFS遇到的问题及解决
对于Appro DM8127 IPNC,默认的启动方式是NAND is used for booting kernel and NAND is used as root filesystem 为了调试 ...
- [mac]WireShark检測不到网卡怎么办?
wireshark是一个很好用的抓包工具,有windows版本号和mac版本号,在mac下安装wireshark,启动后发现提示"There are no interfaces on whi ...
- bzoj1509
树的直径 我先开始以为是个图,想想并不知道什么求图的直径的方法,结果是棵树 那么直觉告诉我们是在直径上面,实际上就是直径+min(i->u,i->v),扫一遍就行了 #include< ...
- 14. extjs中treepanel属性和方法
转自:http://www.cnblogs.com/connortang/p/4414907.html 1.Ext.tree.TreePanel 主要配置项: root:树的根节点. rootVisi ...
- JVM系列-类加载机制
简介 在java中,类的声明周期总共分为以下几种: 加载(Loading),验证(Verification),准备(Preparation),解析(Analysis), 初始化(Initializat ...