`
zzjjun0000
  • 浏览: 23652 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何在JAVA程序中注册热键

    博客分类:
  • JAVA
 
阅读更多
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;
            }
        }
    }
}
分享到:
评论

相关推荐

    jintellitype是JAVA程序中可以热键形式运行

    标题中的“jintellitype”是一个专门为Java应用程序设计的库,它允许开发者在Java程序中注册全局热键,即用户可以通过预先设定的快捷键组合来触发特定的程序功能。这个特性极大地增强了Java应用程序的交互性和用户...

    解决java程序中注册系统级热键

    把JIntellitype.dll复制到了C:\WINDOWS\system32下,然后在eclipse工程名在点击右键——属性——Java构建路径——库——添加外部jar。如果不行,放到D:\Program Files\Java\jre6\bin中,才有作用

    java 应用程序绑定系统热键

    在Java编程环境中,有时我们需要创建一个应用程序,它可以响应用户的自定义快捷键,即系统热键。这通常是通过绑定特定的键盘组合到特定的功能或操作来实现的。在Java中,虽然标准库没有直接提供这样的功能,但我们...

    java注册系统级热键监听

    在Java编程环境中,实现系统级热键监听是一项实用的功能,特别是在开发桌面应用程序时,它能让用户在不聚焦于程序窗口的情况下也能通过特定的快捷键触发指定的事件。本篇文章将详细探讨如何在Java中实现这一功能,...

    java 监听windows系统热键组合

    标题提到的“java 监听windows系统热键组合”就是关于如何在Java程序中实现这一特性的技术点。 Java本身并不直接支持监听系统级的热键,但是有一些第三方库可以帮助我们完成这项任务。其中一个知名的库是...

    java运用jni调用dll实现屏蔽系统热键和任务栏

    4. **加载DLL**:在Java程序中使用`System.loadLibrary`加载DLL,并调用JNI方法。 5. **调用DLL函数**:在Java中通过JNI接口调用DLL中的函数,实现热键屏蔽和任务栏隐藏功能。 在开发过程中,需要注意的是,由于...

    Java 热键编程设置

    JIntellitype是一个强大的工具,它在Java中封装了Windows API,使得Java程序可以监听和响应全局热键事件。由于Java本身不支持直接设置全局热键,JIntellitype库填补了这个空白。`jintellitype-1.3.6.jar`是该库的...

    注册热键

    【注册热键】是计算机编程中的一个功能,允许程序在后台监听并响应用户定义的键盘组合,以此触发特定的操作或事件。在Windows操作系统中,这个功能通常通过使用WinAPI(Windows API)函数来实现,例如`...

    jintellitype-1.3.1(java注册快捷键使用)

    首先,JIntelliType是针对Java开发的一个库,由Markus Goldstein编写,它允许Java应用程序在Windows操作系统上注册全局热键,即使焦点不在应用程序上,也能响应特定的键盘组合。这对于那些需要后台运行或者希望用户...

    JAVA注册系统级快捷键源码

    JIntelliType是Java的一个库,它允许开发者在Java应用中注册全局热键,即系统级快捷键。这个库是跨平台的,可以在Windows、Mac OS X和Linux上使用。在项目中,JIntelliType库被用来监听和响应用户定义的键盘事件,...

    jintellitype:JIntellitype是用于与Microsoft Intellitype命令进行交互以及在Java应用程序中注册全局热键的Java API。

    现在,您可以通过注册Windows热键组合,在Windows中的任意位置按下您选择的组合时,您的应用程序将收到警报。 您是否想对某些Microsoft和Logitech键盘上的特殊Play,Pause,Stop键做出React? 现在甚至有些笔记本...

    java全局热键

    在Java编程环境中,实现全局热键(Global Hotkey)功能是一项常见的需求,它允许用户通过特定的按键组合在任何应用程序中触发某个操作。在给定的资料中,我们看到涉及了`jintellitype-1.3.9.jar`、`GlobleHotKey.rar...

    java 实现仿qq截图效果的工具jar,并支持全局热键

    根据描述,DLL应放置在工程的根目录下,以便Java程序在运行时能正确找到并加载。 总的来说,这个项目结合了Java的高级特性如JNI和Swing,以及操作系统级别的API调用来实现QQ截图的仿制。开发者不仅需要熟悉Java编程...

    java 实现qq截图效果的截图jar,并直接全局热键

    这些库允许Java程序注册系统级别的键盘监听器,使得即使在应用程序未处于焦点时也能响应特定按键组合。 5. **主类(Main.java)**: 提供的`main.java`文件是程序的入口点,它通常包含了如何启动应用和调用相关...

    方便易用的 VFP 热键类库

    1. 注册热键:通过类库提供的API,可以很容易地注册新的热键,例如设置Alt+F1为打开帮助菜单的快捷键。 2. 管理热键:可以动态地修改或取消已注册的热键,以适应不同的用户需求或程序状态。 3. 响应热键:当用户按下...

    Install4j打包用的jre集成JIntellitype.dll

    而JIntellitype是一个Java库,专门用于让Java程序能够接收和处理Windows系统的全局热键,即用户可以在任何应用前端按下预设的快捷键,从而触发Java程序中的特定功能。 在描述中提到的链接...

    创建一个系统级的热键.zip创建全局热键快捷键

    5. **取消注册热键**:当不再需要热键时,使用`UnregisterHotKey()`函数释放资源。记得在程序关闭时取消注册所有已注册的热键。 6. **测试和调试**:完成代码编写后,运行程序并尝试使用设置的热键。确保它能在任何...

    锁定热键源码

    - 注册热键:程序需要告诉操作系统它想要监听哪些热键组合。这通常涉及向系统注册一个热键ID和对应的键盘组合。 - 监听热键:程序设置一个循环或事件监听器,持续检查热键是否被按下。 - 处理事件:当热键被按下...

    通过全局热键模拟键盘粘贴

    在本主题中,我们将深入探讨如何通过全局热键来模拟键盘粘贴操作。 首先,让我们理解什么是模拟键盘粘贴。模拟键盘粘贴通常涉及到编程,它允许程序模拟用户按下“Ctrl + V”键组合,从而在当前焦点所在的任何文本...

    java写的获得屏幕rgb值的小工具|得到屏幕rgb.zip

    JIntellitype是一个Java库,允许Java程序注册和监听Windows全局热键。它通过JNI与C++动态链接库(如`JIntellitype.dll`)交互,实现了与操作系统底层的通信。在Java中,你可以通过调用`...

Global site tag (gtag.js) - Google Analytics