全局监听钩子实现 笔记本x键坏了用其他键代替,或者类似游戏一键连招功能实现 (附带脚本开机一键运行)

4 篇文章 0 订阅

前言

问题:博主使用笔记本时擦键盘不小心
进水了导致 坏了2个键盘 更换太麻烦所以想出了几个方法
1 系统自带的模拟键盘 可是每次都要点出来太麻烦
2 使用第三方工具 结果只找到github源码 下载地址找不到 /(ㄒoㄒ)/~~
3 使用java方法 KeyListener
使用KeyListener监听键盘事件有一些不足之处:
焦点问题:KeyListener需要注册的组件具有焦点并且具有键盘焦点
4 所以历经多个小时 决定采用JNativeHook 全局监听钩子

第一步 导入pom.xml文件

<dependency>
            <groupId>com.github.kwhat</groupId>
            <artifactId>jnativehook</artifactId>
            <version>2.2.2</version>
        </dependency>

第二步 编写代码

package org.example.com.nr;
​
import com.github.kwhat.jnativehook.GlobalScreen;
import com.github.kwhat.jnativehook.NativeHookException;
import com.github.kwhat.jnativehook.keyboard.NativeKeyEvent;
import com.github.kwhat.jnativehook.keyboard.NativeKeyListener;
​
​
import java.awt.*;
import java.awt.event.KeyEvent;
​
public class GlobalKeyListenerExample implements NativeKeyListener {
    Robot robot;
    //定义一个全局变量,用来判断是否按下了ctrl键
    boolean flag = false;
    //定义一个全局变量,用来记录按下了ctrl键的次数
    int count = 0;
​
    public GlobalKeyListenerExample() {
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
    }
​
    public void nativeKeyPressed(NativeKeyEvent e) {
        if ((e.getKeyCode() == NativeKeyEvent.VC_CONTROL)) {
            count++;
            System.out.println("-----------");
            //按下ctrl次数模2设置flag为true,按下ctrl次数模2设置flag为false
            if ((count % 2) == 0) {
                flag = false;
            }else {
                flag = true;
            }
        }
        //flag判断是否按下了ctrl键
        if (flag) {
            //按下e键触发方法体
            if (e.getKeyCode() == NativeKeyEvent.VC_E) {
                try {
                    // 延时100毫秒
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
                robot.keyPress(KeyEvent.VK_BACK_SPACE);
                robot.keyPress(KeyEvent.VK_Q);
                robot.keyRelease(KeyEvent.VK_Q);
            } else if (e.getKeyCode() == NativeKeyEvent.VC_R) {
                try {
                    // 延时100毫秒
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
                robot.keyPress(KeyEvent.VK_BACK_SPACE);
                robot.keyPress(KeyEvent.VK_W);
                robot.keyRelease(KeyEvent.VK_W);
            }
        }
​
    }
​
    public void nativeKeyReleased(NativeKeyEvent e) {
    }
​
    public void nativeKeyTyped(NativeKeyEvent e) {
    }
​
    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        } catch (NativeHookException ex) {
            System.err.println("钩子出先bug.");
            System.err.println(ex.getMessage());
            System.exit(1);
        }
​
        GlobalKeyListenerExample keyListener = new GlobalKeyListenerExample();
        GlobalScreen.addNativeKeyListener(keyListener);
    }
}
​
​

第三步

 如果要一键连招功能 可以在//按下e键触发方法体 自行修改

第四步 打成jar包

不会的可以看这个地址https://www.bilibili.com/video/BV1de411w79P/?spm_id_from=333.337.search-card.all.click&vd_source=353b92f5efbc1c1f3d4cd60064e8556f

image-20240401131235580

搞好就是这样

第5步 编写自动脚本bat 加入开机运行

@echo off
java -jar C:\Users\uzi\IdeaProjects\day03\out\artifacts\day03_jar\day03.jar

注意点C:\Users\uzi\IdeaProjects\day03\out\artifacts\day03_jar\day03.jar 用自己的jar

在Java代码中,你需要使用两个反斜杠\\来表示一个反斜杠\。但是,在Windows的命令行或批处理文件(.bat)中,你只需要使用一个反斜杠\。
​
所以,当你在批处理文件中写C:\Program Files\Java\jdk1.8.0_231\bin\java -jar yourfile.jar时,这是正确的。你不需要在这里使用两个反斜杠\\。
​
但是,如果你在Java代码中表示这个路径,你需要写成C:\\Program Files\\Java\\jdk1.8.0_231\\bin\\java。

C:\Users\uzi\IdeaProjects\day03\out\artifacts\day03_jar 这个地址是你自己jar包的地址

在Windows 11系统中,将.bat文件添加到系统的启动文件夹中的具体步骤如下:

  1. 首先,打开“运行”对话框。你可以通过按Win+R快捷键来打开它。

  2. 在“运行”对话框中,键入shell:startup,然后点击“确定”。这将打开“启动”文件夹。

image-20240401134346802

3 现在,你需要将你的.bat文件(例如run_jar.bat)的快捷方式添加到这个“启动”文件夹中。你可以通过右键单击.bat文件,选择“创建快捷方式”,然后将这个新创建的快捷方式复制并粘贴到“启动”文件夹中来实现这一步。

这样,每次你的Windows 11系统启动时,它就会自动运行这个.bat文件,从而运行你的jar文件

第六步 如果不需要 可以删除脚本

要停止自动运行的脚本,你可以从启动文件夹(通常是C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp)中删除相应的批处理文件。这样,该脚本就不会在下次开机时自动运行。
​
如果你想要在运行中停止脚本,你可以在任务管理器中结束对应的Java进程。以下是步骤:
​
按 Ctrl + Shift + Esc 打开任务管理器。
在“进程”选项卡中,找到名为 “javaw.exe” 或 “java.exe” 的进程。
右键点击该进程,然后选择“结束任务”。
请注意,这将结束所有正在运行的Java应用程序。如果你有多个Java应用程序正在运行,你需要确定哪个是你想要结束的。

ok 到这就成功啦!!!

祝大佬们工作顺利 (*^_^*)
  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kjshuan

点个赞就好啦!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值