java实现全局键盘监听
Java本身是无法对桌面进行全局键盘监听的,无法设置全局快捷键,当焦点从java程序面板失去时,自带的监听器就无法监听了,但是比如一些用java写的截图程序是需要全局快捷键操作的,这里可以使用第三方包JIntellitype来实现全局快捷键注册。
本质上还是调用了dll动态链接库,网上下载jintellitype-1.3.9.jar,JIntellitype.dll,JIntellitype64.dll三个文件,或者文末github自行下载。
接下来演示下如何使用此jar,首先使用eclipse创建一个java项目,目录结构如下
创建一个包名com.melloware.jintellitype,存放两个dll文件,jar包会自行到这里加载dll,创建一个demo类
主要使用方法只有三步:
一,注册快捷键
// 第一步:注册热键,热键标识,组合键(shift),主要热键D
JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_1, 0, (int) 'D');
JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_2, JIntellitype.MOD_SHIFT, (int) 'D');
JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_3,
JIntellitype.MOD_SHIFT + JIntellitype.MOD_CONTROL, (int) 'D');
第一个参数是热键的标识,int类型,第二个参数是控制键等,如shift,ctrl等,也是int,第三个是ABCDE....等字母,第二个参数为0则表示不需要控制键。
二,监听热键事件
// 添加热键监听器
// 第二步:添加热键监听器
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
public void onHotKey(int markCode) {
switch (markCode) {
case GLOBAL_HOT_KEY_1:
JOptionPane.showMessageDialog(null, "注册快捷键(D):跳出弹框!", "提示消息", JOptionPane.WARNING_MESSAGE);
break;
case GLOBAL_HOT_KEY_2:
JOptionPane.showMessageDialog(null, "注册快捷键(Shift+D):跳出弹框!", "提示消息", JOptionPane.WARNING_MESSAGE);
break;
case GLOBAL_HOT_KEY_3:
JOptionPane.showMessageDialog(null, "注册快捷键(Shift+Ctrl+D):跳出弹框!", "提示消息",
JOptionPane.WARNING_MESSAGE);
break;
}
}
});
主要是对快捷键触发的事件监听处理,到这基本就可以使用了,如果有时候为了防止热键冲突,使用完需要删除注册,则第三步
三,删除注册的快捷键
JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_1);
JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_2);
JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_3);
直接把标识作为参数调用方法unregisterHotKey(int key)即可
演示如下,先注册快捷键D
注册好之后全部最小化,然后按D键
可以弹出则表明成功,然后删除快捷键
再按D键就没有反应了,表明快捷键取消,欢迎交流学习!
github:https://github.com/ricozhou/createglobalhotkey