所谓系统级热键就是指一组快捷键,不论当前系统焦点在哪个程序中,只要按下该键,程序就能够捕捉该事件并进行相关处理。该功能在应用程序中是非常有用的,比如系统自带的
“win+L”自动锁屏,QQ中默认的“ctrl+alt+Z”自动打开当前的消息窗口等等。
Java中的事件监听机制虽然功能强大,但是当系统焦点脱离该程序时也无能为力。
Java的最底层是jvm,所以单纯的java不能感知jvm再下面的操作系统的情况,所以单纯的使用java是不能完成这个功能的.
要实现该功能必须调用系统的钩子函数,因此在java中也必须通过jni调用来实现,但是对于不熟悉系统函数或者其他编成语言的朋友来说却是个难题。
以前实现类似的功能都是自己通过c调用系统的钩子函数然后再通过jni调用,自己写的东西只要能满足简单的需求即可,因此功能和程序结构也比较简单。后来在国外的一个网站上发现了一个组件“jintellitype”帮我们封装了绝大部分的功能,而且结构上也采用java中的事件监听机制,我们只要在程序中通过注册即可实现,下面是一个简单的例子:
import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;
public class HotKey implements HotkeyListener {
static final int KEY_1 = 88;
static final int KEY_2 = 89;
static final int KEY_3 = 90;
/**
* 该方法负责监听注册的系统热键事件
*
* @param key:触发的热键标识
*/
public void onHotKey(int key) {
switch (key) {
case KEY_1:
System.out.println("ctrl+alt+I 按下.........");
break;
case KEY_2:
System.out.println("ctrl+alt+O 按下.........");
break;
case KEY_3:
System.out.println("系统退出..........");
destroy();
}
}
/**
* 解除注册并退出
*/
void destroy() {
JIntellitype.getInstance().unregisterHotKey(KEY_1);
JIntellitype.getInstance().unregisterHotKey(KEY_2);
JIntellitype.getInstance().unregisterHotKey(KEY_3);
System.exit(0);
}
/**
* 初始化热键并注册监听事件
*/
void initHotkey() {
//参数KEY_1表示改组热键组合的标识,第二个参数表示组合键,如果没有则为0,该热键对应ctrl+alt+I
JIntellitype.getInstance().registerHotKey(KEY_1, JIntellitype.MOD_CONTROL + JIntellitype.MOD_ALT,
(int) 'I');
JIntellitype.getInstance().registerHotKey(KEY_2, JIntellitype.MOD_CONTROL + JIntellitype.MOD_ALT,
(int) 'O');
JIntellitype.getInstance().registerHotKey(KEY_3, JIntellitype.MOD_CONTROL + JIntellitype.MOD_ALT,
(int) 'X');
JIntellitype.getInstance().addHotKeyListener(this);
}
public static void main(String[] args) {
HotKey key = new HotKey();
key.initHotkey();
//下面模拟长时间执行的任务
while (true) {
try {
Thread.sleep(10000);
} catch (Exception ex) {
break;
}
}
}
}
里面介绍了一个已经帮我们封装好了绝大部分功能的组件:jintellitype,而且结构上也采用java中的事件监听机制,我们只要在程序中通过注册即可实现。用起来很方便很简单。
盗链一下,不知道可不可以
点这里下载jintellitype
使用方法:
下载下来之后是一个压缩包,里面有一个jar文件和一个dll文件,dll文件放入System32目录或者系统path环境变量下。jar文件导入你的工程即可
如果运行的时候遇到了这样的异常:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at com.melloware.jintellitype.JIntellitype.<clinit>(JIntellitype.java:57)
那是因为jintellitype使用了 apache的commons-logging包,而你没有导入,那么你就需要去下载一个
再提供一个专门用来查找jar文件的网站
分享到:
相关推荐
Java本身并不直接支持监听系统级的热键,但是有一些第三方库可以帮助我们完成这项任务。其中一个知名的库是JIntelliType,正如压缩包中的文件名称所示,`jintellitype-1.3.1`。JIntelliType是一个Java库,它允许...
在Java编程环境中,实现系统级热键监听是一项实用的功能,特别是在开发桌面应用程序时,它能让用户在不聚焦于程序窗口的情况下也能通过特定的快捷键触发指定的事件。本篇文章将详细探讨如何在Java中实现这一功能,...
android 后台监听按键事件方法及demoandroid 后台监听按键事件方法及demo
1.java用jintellitype实现后台键盘监听时需要的JIntellitype.dll、JIntellitype64.dll、jintellitype-1.3.9.jar文件 2.java用jna实现后台键盘和鼠标监听时需要的jna.jar、platform.jar文件(这两个文件网上找了好久...
该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...
Java监听键盘事件可以通过使用Windows Hook机制来实现。通过设置键盘Hook,可以捕捉键盘按键事件,并将其传递给Java应用程序。Java应用程序可以通过JNI调用native方法来处理键盘事件。 四、Java监听鼠标事件 Java...
这通常通过注册监听器来实现,监听器是一种回调机制,当特定事件发生时,它会被调用。在Java中,我们可以使用`java.util.Timer`类、`java.util.TimerTask`类以及Java 8引入的`java.time`包中的接口来实现时间监听...
Java监听器的实现可以分为三个部分:事件源、事件对象和事件监听器。事件源是指产生事件的对象,例如按钮、文本框等。事件对象是指事件的载体,用于传递事件信息。事件监听器是指负责处理事件的对象,例如点击按钮时...
标题“android 通过AccessibilityService实现系统按键监听”指出我们要讨论的是如何利用 AccessibilityService 来监听并响应系统的按键事件。这通常涉及到Android系统的底层交互和事件处理机制。以下将详细介绍如何...
接下来,我们可以创建一个实现CustomEventListener的类,并在适当的地方注册监听器: ```java public class MyListener implements CustomEventListener { @Override public void onCustomEvent(CustomEvent e) {...
总结来说,通过 AccessibilityService 实现系统按键监听,主要步骤包括:创建 AccessibilityService 子类、配置服务、处理事件以及请求权限。虽然可以获取到按键事件,但具体的按键信息受限,这主要是为了保护用户...
在Java编程环境中,实现按键精灵效果通常涉及到对操作系统底层功能的调用,这通常通过Java Native Access (JNA) 框架来实现。JNA允许Java代码与本机库进行交互,使得开发者无需编写JNI(Java Native Interface)代码...
在Windows操作系统中,有时我们需要在后台监控键盘输入事件,例如为了记录用户操作或者进行特定的自动化处理。在C++环境中,我们通常会利用Microsoft Foundation Class Library (MFC)来实现这样的功能。本教程将深入...
java开发的监听键盘事件,获取并显示键盘事件
在Java编程中,监听数据库的变化是一项重要的任务,特别是在实时数据处理和系统监控的场景下。以下将详细讲解如何使用Java实现数据库监听,并提供一个代码实例作为参考。 首先,要实现数据库监听,我们需要理解两种...
监听器模式是Java设计模式中的一种行为型模式,主要用于监听某些事件的发生,并在事件发生时自动执行预定义的操作。在实际开发中,监听器模式可以用于多种场景,如UI事件处理、事件广播、异步通知等。 在监听器模式...
本文将详细解析Java事件处理机制中事件监听器的四种实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器以及内部类作为事件监听器。 1. **自身类作为事件监听器** 在自身类作为事件...
java毕业设计——java本地监听与远程端口扫描系统的设计与实现(源代码+论文).zip java毕业设计——java本地监听与远程端口扫描系统的设计与实现(源代码+论文).zip java毕业设计——java本地监听与远程端口扫描系统的...
JIntellitype是一个专门为Java设计的库,它允许Java应用程序与Windows操作系统进行交互,特别是实现了注册和监听系统热键的功能。这个库是由Marco Tusa开发的,它提供了简单的API,使得Java开发者可以轻松地为他们的...
全局使用钩子,监听鼠标与键盘 按键