- 浏览: 23511 次
- 性别:
- 来自: 深圳
最新评论
http://walsece.iteye.com/blog/191169
所谓系统级热键就是指一组快捷键,不论当前系统焦点在哪个程序中,只要按下该键,程序就能够捕捉该事件并进行相关处理。该功能在应用程序中是非常有用的,比如系统自带的
“win+L”自动锁屏,QQ中默认的“ctrl+alt+Z”自动打开当前的消息窗口等等。
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;
}
}
}
}
所谓系统级热键就是指一组快捷键,不论当前系统焦点在哪个程序中,只要按下该键,程序就能够捕捉该事件并进行相关处理。该功能在应用程序中是非常有用的,比如系统自带的
“win+L”自动锁屏,QQ中默认的“ctrl+alt+Z”自动打开当前的消息窗口等等。
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;
}
}
}
}
发表评论
-
启动Tomcat启动不了,报以下错:Error listenerStart解决方法
2016-09-04 15:35 498启动Tomcat启动不了,报以下错: org.apach ... -
java自定义标签库的开发
2016-04-08 17:45 0java自定义标签库的开发 :http://www.360 ... -
sitemesh技术的应用
2016-03-23 13:55 490sitemesh技术的应用 ... -
java爬虫gecco监控来了,不再裸奔
2016-03-21 15:05 0java爬虫gecco监控来了,不再裸奔 爬虫为什么要监控 ... -
Eclipse快捷键 10个最有用的快捷键
2016-03-12 16:28 0Eclipse中10个最有用的快捷键组合 一个Eclip ... -
JAVA 注解的几大作用及使用方法详解
2016-01-13 15:26 0JAVA 注解的几大作用及使用方法详解(2013- ... -
java内存溢出分析
2016-01-12 18:03 412用jmap生产dump文件,win通过任务管理器查看to ... -
java垃圾回收
2016-01-12 13:42 468 -
java内存泄露
2016-01-12 10:19 0用Eclipse Memory Analyzer查找内存泄露: ... -
计算机网络
2016-01-11 17:12 0计算机网络体系结构:http://henu-zyy.iteye ... -
spring MVC
2016-01-11 15:59 0国际化、本地化及Spring MVC 的设计:http://c ... -
服务器缓存技术
2016-01-11 11:45 0缓存使用与设计系列文章--目录:http://carlosfu ... -
java JFrame关闭窗口最大化功能
2015-06-18 10:05 2083如是JFrame框架,直接设置: JFrame jf = ne ... -
一些JAVA代码功能的相关链接
2015-06-18 09:04 0spring集成quartz任务调度: http://aton ... -
jsp页面静态化例子
2015-06-17 11:20 728连接:http://konglx.iteye.com/blog ... -
JFrame实现窗体在屏幕边缘靠边隐藏
2015-06-16 14:30 1120用JAVA swing做一个项目,类似QQ实现靠边隐藏的代码记 ... -
DB2锁表信息
2015-06-01 18:24 489查看数据库锁表信息 ----查询数据库锁表信息 db2 &qu ... -
转:apache安装后no service install解决办法
2015-05-31 17:01 545以下是解决步骤: 1、找到 apache2 目录下的 ... -
在 WebSphere JDBC Adapter 中如何避免死锁和锁超时
2015-05-30 15:40 632在 WebSphere JDBC Adapter 中 ... -
WAS 节点不同步解决办法一
2015-05-26 20:29 1513WAS 节点不同步解决办法一 博客分类: 应用服务器 ...
相关推荐
标题中的“jintellitype”是一个专门为Java应用程序设计的库,它允许开发者在Java程序中注册全局热键,即用户可以通过预先设定的快捷键组合来触发特定的程序功能。这个特性极大地增强了Java应用程序的交互性和用户...
把JIntellitype.dll复制到了C:\WINDOWS\system32下,然后在eclipse工程名在点击右键——属性——Java构建路径——库——添加外部jar。如果不行,放到D:\Program Files\Java\jre6\bin中,才有作用
在Java编程环境中,有时我们需要创建一个应用程序,它可以响应用户的自定义快捷键,即系统热键。这通常是通过绑定特定的键盘组合到特定的功能或操作来实现的。在Java中,虽然标准库没有直接提供这样的功能,但我们...
在Java编程环境中,实现系统级热键监听是一项实用的功能,特别是在开发桌面应用程序时,它能让用户在不聚焦于程序窗口的情况下也能通过特定的快捷键触发指定的事件。本篇文章将详细探讨如何在Java中实现这一功能,...
标题提到的“java 监听windows系统热键组合”就是关于如何在Java程序中实现这一特性的技术点。 Java本身并不直接支持监听系统级的热键,但是有一些第三方库可以帮助我们完成这项任务。其中一个知名的库是...
4. **加载DLL**:在Java程序中使用`System.loadLibrary`加载DLL,并调用JNI方法。 5. **调用DLL函数**:在Java中通过JNI接口调用DLL中的函数,实现热键屏蔽和任务栏隐藏功能。 在开发过程中,需要注意的是,由于...
JIntellitype是一个强大的工具,它在Java中封装了Windows API,使得Java程序可以监听和响应全局热键事件。由于Java本身不支持直接设置全局热键,JIntellitype库填补了这个空白。`jintellitype-1.3.6.jar`是该库的...
【注册热键】是计算机编程中的一个功能,允许程序在后台监听并响应用户定义的键盘组合,以此触发特定的操作或事件。在Windows操作系统中,这个功能通常通过使用WinAPI(Windows API)函数来实现,例如`...
JIntelliType是Java的一个库,它允许开发者在Java应用中注册全局热键,即系统级快捷键。这个库是跨平台的,可以在Windows、Mac OS X和Linux上使用。在项目中,JIntelliType库被用来监听和响应用户定义的键盘事件,...
现在,您可以通过注册Windows热键组合,在Windows中的任意位置按下您选择的组合时,您的应用程序将收到警报。 您是否想对某些Microsoft和Logitech键盘上的特殊Play,Pause,Stop键做出React? 现在甚至有些笔记本...
在Java编程环境中,实现全局热键(Global Hotkey)功能是一项常见的需求,它允许用户通过特定的按键组合在任何应用程序中触发某个操作。在给定的资料中,我们看到涉及了`jintellitype-1.3.9.jar`、`GlobleHotKey.rar...
根据描述,DLL应放置在工程的根目录下,以便Java程序在运行时能正确找到并加载。 总的来说,这个项目结合了Java的高级特性如JNI和Swing,以及操作系统级别的API调用来实现QQ截图的仿制。开发者不仅需要熟悉Java编程...
这些库允许Java程序注册系统级别的键盘监听器,使得即使在应用程序未处于焦点时也能响应特定按键组合。 5. **主类(Main.java)**: 提供的`main.java`文件是程序的入口点,它通常包含了如何启动应用和调用相关...
1. 注册热键:通过类库提供的API,可以很容易地注册新的热键,例如设置Alt+F1为打开帮助菜单的快捷键。 2. 管理热键:可以动态地修改或取消已注册的热键,以适应不同的用户需求或程序状态。 3. 响应热键:当用户按下...
而JIntellitype是一个Java库,专门用于让Java程序能够接收和处理Windows系统的全局热键,即用户可以在任何应用前端按下预设的快捷键,从而触发Java程序中的特定功能。 在描述中提到的链接...
5. **取消注册热键**:当不再需要热键时,使用`UnregisterHotKey()`函数释放资源。记得在程序关闭时取消注册所有已注册的热键。 6. **测试和调试**:完成代码编写后,运行程序并尝试使用设置的热键。确保它能在任何...
首先,JIntelliType是针对Java开发的一个库,由Markus Goldstein编写,它允许Java应用程序在Windows操作系统上注册全局热键,即使焦点不在应用程序上,也能响应特定的键盘组合。这对于那些需要后台运行或者希望用户...
- 注册热键:程序需要告诉操作系统它想要监听哪些热键组合。这通常涉及向系统注册一个热键ID和对应的键盘组合。 - 监听热键:程序设置一个循环或事件监听器,持续检查热键是否被按下。 - 处理事件:当热键被按下...
在本主题中,我们将深入探讨如何通过全局热键来模拟键盘粘贴操作。 首先,让我们理解什么是模拟键盘粘贴。模拟键盘粘贴通常涉及到编程,它允许程序模拟用户按下“Ctrl + V”键组合,从而在当前焦点所在的任何文本...
JIntellitype是一个Java库,允许Java程序注册和监听Windows全局热键。它通过JNI与C++动态链接库(如`JIntellitype.dll`)交互,实现了与操作系统底层的通信。在Java中,你可以通过调用`...