原文地址: JavaFx全局快捷键实现(Kotlin) | Stars-One的杂货小窝

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

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

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

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

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

使用

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

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

JIntellitype此库好像支持JDK8和JDK9

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文件都打包上传到蓝奏云了,各位需要自取

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

测试

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

JavaFx全局快捷键实现(Kotlin)的更多相关文章

  1. WPF之全局快捷键

    目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...

  2. Delphi 中的全局快捷键+给指定窗体发送按键

    [背景] 公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集.同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像.说干就干,一直想做全局快捷键了,网 ...

  3. 在WPF中使用全局快捷键

    今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了. static cl ...

  4. 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效

    在Form Load中设置showInTaskBar =false   或 隐藏窗口 this.Hide() 会导致注册的全局快捷键无效.  反正是其中一个,有点记不清了. 在Form Shown中s ...

  5. WPF设置全局快捷键

    转自:http://www.cnblogs.com/atskyline/archive/2012/09/20/2694878.html 第一步 引入到Winows API 偷懒直接写在类里 1: [D ...

  6. C#Winform 注册使用全局快捷键详解

    C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...

  7. 在 WinForms 项目中使用全局快捷键

    借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Windows API 打交道.本文就交你如何使用 Win ...

  8. win10 添加全局快捷键

    前言 好久没写博客了,今天水一下 如何在win10 下添加一个全局唤醒的快捷键(打开截图软件) 步骤 win + Q 输入 管理工具 添加快捷方式 这里没有管理员权限,可以直接把创建好的 快捷方式 粘 ...

  9. windows 设置/修改全局快捷键

    打开控制面板,小图表显示下 点击 管理工具项, 将自己想要谁知快捷键的程序的快捷方式放进去,(需要确认管理员权限) 如图,第一个即为 lz添加的 右击选择属性 在快捷键处同时按下你想要的组合键即可(不 ...

随机推荐

  1. git cherry-pick 教程

    转自:http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html 对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求. 这时分两 ...

  2. 从拟阵基础到 Shannon 开关游戏

    从拟阵基础到 Shannon 开关游戏 本文中的定理名称翻译都有可能不准确!如果有找到错误的同学一定要联系我! 本文长期征集比较好的例题,如果有比较典型的题可以联系我 目录 从拟阵基础到 Shanno ...

  3. unity优化 — UGUI纹理格式的选择

    首次界面打开加载的资源(如 贴图)会被缓存在内存中,再次打开界面由于内存中已有了资源 所以会更快.如何让首次打开界面会更快呢? 图片是否进行了有效的压缩.Android 平台下不带透明通道 优先使用E ...

  4. etcd raft 处理流程图系列3-wal的存储和运行

    存储和节点的创建 raftexample中的存储其实有两种,一个是通过raft.NewMemoryStorage()进行创建的raft.raftStorage,关联到单个raft节点,另一个是通过ne ...

  5. rabbitMq内存与磁盘分配问题

    在服务器上也可以改变配置文件修改内存 也可以使用命令进行分配: 相对内存:rabbitmqctl  set_vm_memory_hgih_waterwmark 0.4     使用时可以把这个0.4替 ...

  6. JavaScript高级程序设计(读书笔记)之函数表达式

    定义函数的方式有两种:一种是函数声明,另一种就是函数表达式. 函数声明的一个重要特征就是函数声明提升(function declaration hoisting),意思是在执行代码前会先读取函数声明. ...

  7. Nginx对代理HTTP资源的限制访问

    为了限制连接的数量,首先,使用指令来定义密钥并设置共享内存区域的参数(工作进程将使用该区域来共享键值的计数器).作为第一个参数,指定作为关键字计算的表达式.在第二个参数区域中,指定区域的名称及其大小. ...

  8. Vue Router路由导航及传参方式

    路由导航及传参方式 一.两种导航方式 ①:声明式导航 <router-link :to="..."> ②:编程式导航 router.push(...) 二.编程式导航参 ...

  9. Java基础(二)——内部类

    一.内部类 内部类(Inner Class)就是定义在一个类里面的类.与之对应,包含内部类的类被称为外部类.内部类可以用private修饰. 1.为什么要定义内部类?或者内部类的作用是什么? 内部类提 ...

  10. JDK方法区、元空间区别 & String.intern相关面试题

    一.方法区.永久代.元空间 1.方法区.永久代 方法区也是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.方法区域又被称为"永久代& ...