java全局快捷键--jintellitype

1. 简介

Java本身是无法对桌面进行全局键盘监听的,无法设置全局快捷键,当焦点从java程序面板失去时,自带的监听器就无法监听了

一些程序是需要全局快捷键操作的,此时就可以使用第三方包JIntellitype来实现全局快捷键注册。

本质上还是调用了dll动态链接库

向该第三方库注册快捷键的时候,需要指定一个int标识码,用于代表快捷键。

当用户按下快捷键的时候,把该快捷键的标识代码发送给观察者。告知观察者用户按下了这个快捷键。

我设想的工作模式是这样的:注册快捷键的时候,顺便提交一个满足特定接口的类。用户按下快捷键的时候,该第三方库就执行这个类中的接口。

事实上,这个使用模式可以仔细品品。除了用到了观察者设计模式,绝对还有别的模式。

2. 下载

网上搜索jintellitype,下载得到3个文件:jintellitype-1.3.9.jar,JIntellitype.dll,JIntellitype64.dll

3. 安装

3.1 在java项目中增加一个包,包名为com.melloware.jintellitype。并存放两个dll文件

3.2 导入jar外部包。

4. 使用

4.1 import jintellitype类

//当然也可以用ide的自动import功能

import com.melloware.jintellitype.HotkeyListener;

import com.melloware.jintellitype.JIntellitype;

4.2定义热键标识

用于在设置多个热键时,在事件处理中区分用户按下的热键

最好是在类开始的地方声明为常量

public static final int MINIMIZE_KEY_MARK = 1

4.3注册热键

第一个参数表示热键的标识

第二个参数表示主快捷键。如alt、control等。0表示不需要主快捷键

这几个主快捷键的数值定义为1,2,4,8。所以可以简单用数值相加的方式来表示快捷键组合。使用最好用引用常量的方式,代码可读性高。

第三个参数表示次会计就。如s,n等。这些都是用int来表示

必须把char类型转换成int类型,单字母直接用强制转换就行了

其它特殊按键的数值见附录。

JIntellitype.getInstance().registerHotKey(FUNC_KEY_MARK, JIntellitype.MOD_ALT +JIntellitype.MOD_CONTROL , (int)'S');

4.4添加快捷键观察者

注意,这里是用add方法。也就是说可以添加多个观察者。

按下快捷键后,所有的观察者都会被执行onHotkey方法。

onHotkey方法的参数表示之前注册的快捷键标识

网上好多采用的是内部匿名类或lambda语句。最好不要用这种方法。因为后面需要remove观察者。否则会出现多重观察的情况。比如说,点击一个按钮,该按钮的功能是注册快捷键,add观察者。重复点击按钮,就会多次注册。会导致多次执行

HotkeyListener hotkeyListener = new RunRobotHotKeyListener();

JIntellitype.getInstance().addHotKeyListener(hotkeyListener);

public class RunRobotHotKeyListener implements HotkeyListener {

public void onHotKey(int markCode) {

mRobotGos[markCode].go();

}

}

4.5 移除快捷键监听, 移除观察者

JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_CODE_0);

JIntellitype.getInstance().removeHotKeyListener(hotkeyListener);

5. 一些特殊按键的数值

F1 = 112;

F2 = 113;

F3 = 114;

F4 = 115;

F5 = 116;

F6 = 117;

F7 = 118;

F8 = 119;

F9 = 120;

F10 = 121;

F11 = 122;

F12 = 123;

ESC = 27;

TAB = 9;

CAPSLOCK = 20;

SHIFT = 16;

CTRL = 17;

START_LEFT = 91;

START_RIGHT = 92;

CONTEXT_MENU = 93;

ALT = 18;

SPACE = 32;

CARRIAGE_RETURN = 13;

LINE_FEED = 10;

BACK_SLASH = 220;

BACK_SPACE = 8;

INSERT = 45;

DEL = 46;

HOME = 36;

END = 35;

PAGE_UP = 33;

PAGE_DOWN = 34;

PRINT_SCREEN = 44;

SCR_LK = 145;

PAUSE = 19;

LEFT_ARROW_KEY = 37;

UP_ARROW_KEY = 38;

RIGHT_ARROW_KEY = 39;

DOWN_ARROW_KEY = 40;

6. 主快捷键的数值

JIntellitype.MOD_ALT = 1;

JIntellitype.MOD_CONTROL = 2;

JIntellitype.MOD_SHIFT = 4;

JIntellitype.MOD_WIN = 8;

参考文章

java 全局快捷键_java全局快捷键--jintellitype相关推荐

  1. java 菜单快捷键_Java 菜单快捷键

    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,ActionEvent.ALT_MASK)); 是当鼠标焦点在你所在的程序界面 ...

  2. java swing 按键_Java Swing 快捷键

    Java  Swing 快捷键 给Java Swing编程中按钮或者其他组件事件添加快捷键的方法: Component.setAccelerator(KeyStroke.getKeyStroke('Q ...

  3. idea java 快捷键_JAVA IDE IntelliJ IDEA 快捷键使用详记

    一.高效定位代码 1.项目之间的跳转 Ctrl + Alt + [  :切换到下一个项目窗口 Ctrl + Alt + ]  :  切换到上一个项目窗口 2.文件之间的跳转↑↓←→ Ctrl + E ...

  4. java程序员常用的快捷键

    Eclipse快捷键: Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键 1. [ALT+/]   此快捷键为用户编 ...

  5. java文档注解快捷键_javadoc注释快捷键

    JavaDOC 注释使用方法 目录 前言 一. Java 文档和 javadoc... "开始."*/"结束的是C语言风格的注释语句,在"/**...*/&qu ...

  6. java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令

    学习java之电脑的常用快捷键和DOS窗口下的常用命令 电脑一些常用的快捷键 win快捷键: 单独按Windows:显示或隐藏 "开始"功能表 Windows+BREAK:显示&q ...

  7. [转载] java自定义异常类以及全局log打印

    参考链接: 用Java打印异常消息的3种不同方式 import lombok.Data; /** * @author 01369526 * */ @Data @SuppressWarnings(&qu ...

  8. java 定义全局对象_JavaScript 全局对象

    全局对象描述 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符.通过使用全局对象,可以访问所有其他所有预定义的对象.函数和属性.全局对象不是任何对象的属性,所以它没有名 ...

  9. idea改类名快捷键_Idea全部快捷键+自行修改快捷键

    Idea常用快捷键 Tab,代码标签输入完成后,按 Tab,生成代码 Ctrl+E,最近的文件 Ctrl+X,删除行 Ctrl+D,复制行 Alt+1,快速打开或隐藏工程面板 ctrl+alt+t 快 ...

  10. ue设置注释快捷键_UltraEdit常用快捷键大全

    第一页:UltraEdit常用快捷键大全 第二页:UltraEdit常用快捷键大全 第三页:UltraEdit常用快捷键大全 文本编辑 作用域 功能 快捷键 文本编辑器 改写切换 Insert 文本编 ...

最新文章

  1. java I/O
  2. 【开发环境】PyCharm 配置 GitHub ( 在 PyCharm 中向 GitHub 提交代码 )
  3. Python:3种方式实现随机生成8位字符
  4. linux dhcpd 设置 关于 subnet
  5. 新议题,好多年前的华为面试题
  6. CAD2012安装错误
  7. 完数[HDU1406]
  8. linux 使用systemctl 启动服务报错: Error: No space left on device
  9. 串级pid算法c语言实现,【开源】分享一个经典的串级PID算法,附源代码
  10. 用Multisim对高频丙类谐振功率放大器进行仿真
  11. 崩溃!因对领导不满前网管离职后远程入侵服务器,致诊疗系统瘫痪!
  12. Java集合(一)什么是集合
  13. 根据身份证号计算年龄 15位或18位身份证号的年龄计算方法
  14. 第十六届“振兴杯”计算机网络管理员赛项理论参考题库(2)多选
  15. 龙芯笔记本走出国门的困惑
  16. 阿里云域名备案和域名解析流程详解
  17. UI电话图标设计教程
  18. 转行学java好学吗?完全没有经验怎么办?
  19. 【推荐系统学习总结 NCF => NGCF => LightGCN】
  20. 数据可视化 信息可视化_数据可视化极性

热门文章

  1. 用python做餐厅点餐系统
  2. 操作系统之运行环境简介
  3. esp8266基本使用 - WebServer
  4. 常用计算机键,键盘常用15个功能键(电脑入门基本知识键盘)
  5. U盘全新安装High sierra及打造mac,win10双系统
  6. 创建可引导的 macOS High Sierra 安装 U 盘
  7. Linux关闭swap
  8. matlab阿伦尼乌斯方程,马铃薯酶促褐变机理研究
  9. 不把鸡蛋放在一个篮子里面
  10. 50条最隐讳的笑话,只有最聪明的人才能理解