当前位置: 首页 > ds >正文

【JAVA】监听windows中鼠标侧面键的按钮按下事件

监听windows中鼠标侧面键的按钮按下事件

    • 用到的包
    • 核心类
    • 使用这个类

用到的包

jna-5.11.0.jar
jna-platform-5.11.0.jar

核心类

package sample.tt.mouse;import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.platform.win32.WinUser.HHOOK;
import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;
import com.sun.jna.platform.win32.WinUser.MSG;import java.awt.*;
import java.awt.event.KeyEvent;public class GlobalMouseHook {private static HHOOK hHook;private static LowLevelMouseProc mouseProc;private static User32 lib;// 手动定义鼠标事件常量private static final int WM_XBUTTONDOWN = 0x020B;private static final int XBUTTON1 = 0x0001;private static final int XBUTTON2 = 0x0002;private static LRESULT callback(int nCode, WPARAM wParam, WinUser.MSLLHOOKSTRUCT lParam) {if (nCode >= 0) {int wParamValue = wParam.intValue();// 检测侧面键按下事件if (wParamValue == WM_XBUTTONDOWN) {int buttonId = (lParam.mouseData >> 16) & 0xFFFF;if (buttonId == XBUTTON1) {//左侧从前往后第一个按钮executeALTF4();}if (buttonId == XBUTTON2) {//左侧从前往后第一个按钮executeALTESC();}}}return lib.CallNextHookEx(hHook, nCode, wParam, new LPARAM(Pointer.nativeValue(lParam.getPointer())));}public interface LowLevelMouseProc extends WinUser.HOOKPROC {LRESULT callback(int nCode, WPARAM wParam, WinUser.MSLLHOOKSTRUCT lParam);}public static void startHook(Runnable onSideButtonClick) {lib = User32.INSTANCE;HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);mouseProc = GlobalMouseHook::callback;hHook = lib.SetWindowsHookEx(WinUser.WH_MOUSE_LL,mouseProc,hMod,0);// 消息循环new Thread(() -> {MSG msg = new MSG();while (lib.GetMessage(msg, null, 0, 0) != 0) {lib.TranslateMessage(msg);lib.DispatchMessage(msg);}}).start();}public static void stopHook() {if (hHook != null) {lib.UnhookWindowsHookEx(hHook);hHook = null;}}public static void executeALTF4(){try {// 创建 Robot 实例Robot robot = new Robot();robot.setAutoDelay(100); // 设置按键间隔,确保系统能正确识别组合键// 模拟按下 Alt 键robot.keyPress(KeyEvent.VK_ALT);// 模拟按下 F4 键robot.keyPress(KeyEvent.VK_F4);// 释放 F4 键robot.keyRelease(KeyEvent.VK_F4);// 释放 Alt 键robot.keyRelease(KeyEvent.VK_ALT);System.out.println("已模拟 Alt+F4 快捷键");} catch (AWTException e) {e.printStackTrace();}}public static void executeALTESC(){try {// 创建 Robot 实例Robot robot = new Robot();robot.setAutoDelay(100); // 设置按键间隔,确保系统能正确识别组合键// 模拟按下 Alt 键robot.keyPress(KeyEvent.VK_ALT);// 模拟按下 F4 键robot.keyPress(KeyEvent.VK_ESCAPE);// 释放 F4 键robot.keyRelease(KeyEvent.VK_ESCAPE);// 释放 Alt 键robot.keyRelease(KeyEvent.VK_ESCAPE);System.out.println("已模拟 Alt+F4 快捷键");} catch (AWTException e) {e.printStackTrace();}}
}

使用这个类

        // 启动全局钩子GlobalMouseHook.startHook(new Runnable() {@Overridepublic void run() {System.out.println(234);}});// 关闭时卸载钩子primaryStage.setOnCloseRequest(e -> GlobalMouseHook.stopHook());
http://www.xdnf.cn/news/15529.html

相关文章:

  • React之旅-06 Ref
  • 波兰无人机具身导航基准测试与最新进展!FlySearch:探索视觉语言模型的探索能力
  • python学智能算法(十八)|SVM基础概念-向量点积
  • 深入了解linux系统—— 进程信号的产生
  • 基于Snoic的音频对口型数字人
  • OPC数采服务器软件Takebishi为何比Kepware实施成本更低?
  • I/O 多路复用实现方式
  • kafka的部署
  • 第十二批深度合成算法备案情况
  • 分布式系统中设计临时节点授权的自动化安全审计
  • Codeforces Round 787 (Div. 3)(A,B,C,D,E,F,G)
  • NSSCTF Web 一点学习
  • 【2025/07/14】GitHub 今日热门项目
  • 015 程序地址空间入门
  • muduo面试准备
  • ThreadLocal深度解析:结构、存储机制与最佳实践
  • Linux ACL权限策略
  • 分享三个python爬虫案例
  • Docker搭建Redis分片集群
  • 【PTA数据结构 | C语言版】字符串连接操作
  • Kotlin集合接口
  • 【数据同化案例1】ETKF求解参数-状态联合估计的同化系统(完整MATLAB实现)
  • 问题记录:Fastjson序列化-空值字段处理
  • 跨域中间件通俗理解
  • 日记-生活随想
  • LVS负载均衡集群概述
  • C++--List的模拟实现
  • 【时时三省】(C语言基础)通过指针引用数组元素2
  • 20250711_Sudo 靶机复盘
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers