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. public static void main(String[] args) {
  89. new GlobleHotKeyDemo();
  90. }
  91. }

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

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

第二步:注册热键;

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

  

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

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

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...

  2. Qt5全局热键第三方库qxtglobalshortcut5使用

    1.下载第三方库https://github.com/ddqd/qxtglobalshortcut5. 2.把qxtglobalshortcut5文件放在项目目录下,在项目.pro加入一句,inclu ...

  3. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  4. java调用第三方包的例子

    第三方包路径 D:\jp\log4j\log4j-1.2.16.jar 代码D:\jp\log4j\Log4jDemo.java import org.apache.log4j.*; public c ...

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

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

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

    本文转载自:http://blog.csdn.net/ztf312/article/details/51338060 本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过 ...

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

    1.通过自定义Filter实现 https://github.com/alibaba/fastjson/wiki/SerializeFilter public class JackJsonLowCas ...

  8. Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)

    Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...

  9. 笔记——malloc、free、不同数据类型操作、.pyc文件、python安装第三方包、验证一个网站的所有链接有效性

    C — malloc( ) and free( ) C 语言中使用malloc( )函数申请的内存空间,为什么一定要使用free释放? **malloc()函数功能:是从堆区申请一段连续的空间,函数结 ...

随机推荐

  1. 玩转iOS开发 - 消息推送

    消息推送

  2. Cocos2d-x旧引擎文件夹结构

    转自:http://blog.csdn.net/lwuit/article/details/7870395 Cocos2d-x的文件夹结构例如以下: 文件夹的详细结构介绍例如以下: Box2D:物理引 ...

  3. AE After Effect 如何替换和修改素材

    替换素材:如图所示,相框外的人是成双成对的,相框里面的却只有一个人,我们想要把这个素材替换成两个人的.我们鼠标放到视频预览框的任何一个元素上面底部都会提示这是什么素材.比如我放到一个人的上面,则该人物 ...

  4. iOS自己定义返回button(不影响返回手势)

    此方法能够自己定义返回button,且不影响返回手势. 新方法: self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] in ...

  5. 华为OJ2288-合唱队(最长递增子序列)

    一.题目描述 描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, ...

  6. 浅谈MySQL Capabilities --从调研PHP mysqlnd源码细节角度认识

    今天一起来研究下MySQL Capabilities,这个非常重要,如果大家有想法自己动手实现一个MySQL客户端或者Proxy工具,那么就得先了解一下这块,正好PHP 5.3以上版本由于官方为了规避 ...

  7. EEPlat的控制器概念

    控制器是EEPlat平台界面层部分的核心概念.平台中界面展示都是通过平台的各种控制器综合控制输出的. EEPlat平台的界面层模型採用了HMVC模式.HMVC模式的採用使得EEPlat平台界面层可以实 ...

  8. Vijos P1023Victoria的舞会3【贪心+DFS求强联通分量】

    链接:Click Me! P1023Victoria的舞会3 Accepted 标签:Victoria的舞会[显示标签] 描写叙述 Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京 ...

  9. web 开发之js---巧用iframe实现jsp无刷新上传文件

    首先要说的就是 ajax 是无法实现上传文件的,可以想一下ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不能操作文件的,所以就不要再说用ajax来实现文件的上传了,这是 ...

  10. C# TextBox改变高度的方法(转载)

    最近在做C# Winform项目,需要有一个能动态调整大小的Textbox,并且要是单行的.试了几次,单行模式的Textbox不能直接改高度.于是搜索了一下,整理出几个改变高度的方法. 1.将Text ...