当前位置: 首页 > news >正文

使用 jintellitype 库在 Java 程序中实现监听 Windows 全局快捷键(热键)

文章目录

  • 一、问题背景
  • 二、依赖导入
  • 三、使用实例
    • 1. 注册热键监听
    • 2. 注册热键事件

一、问题背景

有时候我们在开发 Java 程序的时候,需要监听全局快捷键或热键,例如监听 ctrl+ alt + Q 全局快捷键被按下的事件,随后做一些特定的业务。因此,我们可以使用 melloware/jintellitype 库实现快捷键的监听,官方仓库为:https://github.com/melloware/jintellitype

jintellitype 库是一个基于 JNI 实现的在 Windows 下监听全局快捷键组合的开源库,其具有 API 简单直观,使用便捷的特点,极其方便在 Java 开发中使用。

二、依赖导入

首先在项目中的 build.gradle 文件中导入 jintellitype 依赖。

dependencies {// jintellitypeimplementation "com.melloware:jintellitype:1.5.0"
}

三、使用实例

1. 注册热键监听

我们使用 JIntellitype.getInstance().addHotKeyListener() 方法注册一个热键监听器,需要传递一个 HotkeyListener 对象,其只有一个 onHotKey 方法,传递 identifier 参数,此参数代表着我们向 JIntellitype 注册的热键事件的唯一标识符。HotkeyListener源码如下:

public interface HotkeyListener {/*** Event fired when a WM_HOTKEY message is received that was initiated* by this application.* <p>* @param identifier the unique Identifier the Hotkey was assigned*/void onHotKey( int identifier );
}

JIntellitype 检测到我们注册的按键事件的时候,回调此方法。一个标准的代码如下:

JIntellitype.getInstance().addHotKeyListener(keyMark -> {switch (keyMark) {}});

此时可以在 switch 添加我们注册的按键事件,以处理不同的业务。

2. 注册热键事件

我们需要向 JIntellitype 注册我们需要监听的按键事件,可以调用 JIntellitype.getInstance().registerHotKey() 方法进行注册,此方法有两个签名:

/*** Registers a Hotkey with windows. This combination will be responded to by* all registered HotKeyListeners. Uses the JIntellitypeConstants for MOD,* ALT, CTRL, and WINDOWS keys.* <p>* @param identifier a unique identifier for this key combination* @param modifier MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN from*           JIntellitypeConstants, or 0 if no modifier needed* @param keycode the key to respond to in Ascii integer, 65 for A*/
public void registerHotKey(int identifier, int modifier, int keycode) { }/*** Registers a Hotkey with windows. This combination will be responded to by* all registered HotKeyListeners. Use the identifiers CTRL, SHIFT, ALT* and/or WIN.* <p>* @param identifier a unique identifier for this key combination* @param modifierAndKeyCode String with modifiers separated by + and keycode*           (e.g. CTRL+SHIFT+A)* @see #registerHotKey(int, int, int)* @see #registerSwingHotKey(int, int, int)*/
public void registerHotKey(int identifier, String modifierAndKeyCode) { }

两个方法的第一个参数为 identifier,为热键事件的唯一标识符,如果有对应的事件被按下,则在 JIntellitype.getInstance().addHotKeyListener() 注册的监听者中,回调 onHotKey 方法时被传递。


public void registerHotKey(int identifier, int modifier, int keycode) 签名中,
第二个参数 modifier 为特殊控制键,例如 MOD_SHIFT 代表 shift 键, MOD_ALT 代表 alt 键, MOD_CONTROL 代表 ctrl 键, MOD_WIN 代表 win 键,如果需要传递两个功能键,则可以使用按位与运算,
而第三个参数为字符键的 ASIIC 码。例如 ctrl + E,代码为:

JIntellitype.getInstance().registerHotKey(0x123, MOD_CONTROL, 'E')

public void registerHotKey(int identifier, String modifierAndKeyCode) 签名中,第二个参数 modifierAndKeyCode 为多个组合键的按键事件,其格式为 特殊控制键+字符键,且可以有多个控制键,只能有一个字符键。
例如,传递字符串 CTRL+SHIFT+A,则表示按下 ctrl 键,shift 键 和 A 键:

JIntellitype.getInstance().registerHotKey(0x123, "CTRL+SHIFT+A")

四个特殊键的字符串分别为:
ctrl 键: CTRL
alt 键:ALT
shift 键:SHIFT
win 键:WIN

http://www.dtcms.com/a/446088.html

相关文章:

  • Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南
  • 广州网站网站建设福建建站公司
  • ⚡ arm 32位嵌入式 Linux 系统移植 QT 程序
  • VR大空间资料 02 —— 常用Body IK对比
  • 什么是网站建设需求重庆建设工程信息网查询系统
  • 高校思政专题网站建设南京有哪些知名的网站建设
  • 【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
  • ionic 浮动框详解与应用
  • 开源 C++ QT QML 开发(五)复杂控件--Gridview
  • 下载建设银行官方网站工程承包合同协议书
  • 第九章:装饰器模式 - 动态增强的艺术大师
  • OpenAI 发布 GPT-5 Instant:AI 有了 “情感温度计“
  • 苏州做网站公司选苏州聚尚网络做百度百科的网站
  • SSE与轮询技术实时对比演示
  • 示范专业网站建设深圳联雅网站建设
  • php 8.4.13 更新日志
  • MongoDB 认证失败(错误码 18)
  • 深圳网站建设主页什么公司需要建立网站吗
  • 陕西省建设信息管理网站网站开发 家具销售 文献
  • 数学标准库
  • 怎么做跳转不影响原网站排名云抢购网官方网站
  • 漳州手机网站建设公司陕西专业网站建设哪家好
  • 利用 VsCode + EIDE 进行嵌入式开发(保姆级教程)
  • 长春企业网站制作优化微商好货源app下载
  • PlayerChoice系统介绍
  • 网站要实名认证旅游网站建设方案之目标
  • [ SpringWeb ] 搭建和配置
  • 高层次综合hls设计第一章
  • Docker 启动 Easysearch 时自定义初始密码的几种方式
  • 15.C++三大重要特性之继承