JavaFx全局快捷键实现(Kotlin)

Stars-one 2021年10月03日 62次浏览 本篇字数为1,681字

本文为作者原创,转载请注明出处,谢谢配合
作者:Stars-one
链接:https://stars-one.site/2021/10/03/javafx-global-shortcut-keyboard


最近整款工具需要用到全局快捷键,搜集了下网上的资料,发现有个JIntellitype库可以用来实现全局快捷键,下面记录下个人的使用

JIntellitype只适用windows的全局快捷键绑定,并不能全平台支持!!

注:本文使用的Kotlin,Java版的可以参考下JIntellitype的文档

PS:后面我还发现有个jnativehook的库,在github上的:star:还挺多的,文档介绍其支持全平台的

然后使用文档啥也没有,参考的示例整了些没能成功,其例子也是给的swing,而不是javafx,我自己摸索了半天还报错,就放弃了😖

使用

吐槽下,这个作者写的文档使用说明其实有点不是太明确,第一遍看过去人都懵的...😶

而且看网上的资料,都是自己去拷贝jar包,实际上作者已经把jar包发布在maven中央仓库了,根本没有必要手动去下载

JIntellitype此库好像只支持JDK8

1.导入依赖

<dependency>
    <groupId>com.melloware</groupId>
    <artifactId>jintellitype</artifactId>
    <version>1.4.0</version>
</dependency>

2.注册按键

我们以全局注册个Ctrl+Shift+G的快捷键为例

//这里必须是大写字母
val keyCode = 'G'.toInt() //这个其实是ASCII码(G的ASCII码数值为71)

//注意这个1,下面第三步的回调函数会根据这个来进行判断
JIntellitype.getInstance().registerHotKey(1, JIntellitype.MOD_CONTROL + JIntellitype.MOD_SHIFT, keyCode)
  • JIntellitype.MOD_CONTROL Ctrl键
  • JIntellitype.JIntellitype.MOD_SHIFT Shift键
  • JIntellitype.MOD_ALT Alt键
  • JIntellitype.MOD_WIN Windows键

3.注册按键监听器

JIntellitype.getInstance().addHotKeyListener {
    if (it == 1) {
        //写上触发快捷键后的处理逻辑
        println("已按下快捷键")
    }
}

注意,addHotKeyListener中回调函数会返回一个数字,这个数字是用来区分不同的快捷键的,是在上面注册按键的步骤中定义的

PS:如果想取消注册,使用unregisterHotKey()方法即可,如下面所示

//1就是上面注册用的
JIntellitype.getInstance().unregisterHotKey(1)

4.下载dll文件

点击dll文件下载

上面我把32位和64位的dll文件都打包上传到蓝奏云了,各位需要自取

下载下来后需要把文件放在指定路径中,如下图所示

测试

随便在一个地方,按下设置好的快捷键就会成功触发

相关标签