# Joystick **Repository Path**: maoTVReporter/Joystick ## Basic Information - **Project Name**: Joystick - **Description**: java+JNA+cpp的手柄控制鼠键程序 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-12-11 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Joystick #### 介绍 手柄控制鼠键程序; 使用DirectInput8 API实现手柄设备控制相关功能 支持: 模式[HID,DInput,XInput], 连接方式[蓝牙,2.4G,有线] #### 设备兼容性和问题 * **不支持[XBox series]**: XBox手柄,不能后台获取手柄事件(无线和有线XInput都是),必须有前置窗口,无官方/权威的原因说明页面 (不影响非XBox手柄的XInput等情况, 老XBox手柄可能正常) https://stackoverflow.com/questions/48748313/using-directinput-with-xbox-one-controller-and-window-focus-on-windows-10 https://github.com/DJm00n/cppwinrtgamepad https://www.coder.work/article/3328715 (已失效) * **对高灵敏度的[摇杆,有键程的肩键]不友好**,容易误触和误判等 * 只能同时连接一个手柄 * UI操作不太好,swing框架问题,已尽力 * 两个完全不同的手柄在[安卓HID模式]下,不能区分手柄 * 单个连接时,获取到的[名称和GUID]是一样的,如名称都是[6 轴 15 按钮 游戏板 有帽子切换] * 同时连接时,GUID会"递增" * 是HID底层设计问题: 获取到的不是真实硬件GUID等信息,是HID的内部ID等 * 个别手柄的硬件bug * 连接后,摇杆不是[初始值]: 100%重现, 原因是开机时摇杆不在[初始状态] * 连接后,手柄操作延迟很大: 少概率重现(也不排除是程序上的问题,使用了小核线程?); 处理:重启手柄 #### 权限说明 由于window的[UIPI](https://www.baidu.com/s?wd=UIPI)机制,程序权限不足时会导致控制失效; 有高级权限程序的如:任务管理器,管理员运行的[微信,jar程序] 目前解决方案:使用管理员运行本程序;某些程序在管理员下仍无法操作,如360 最佳解决方案:加入虚拟HID鼠键设备实现控制功能,但实现难度大; 如[Monect](https://www.baidu.com/s?wd=Monect), 可以完美支持任何界面操作,包括系统登陆界面; #### 类似的软件 + Monect:收费,功能最全的控制类软件 + Steam内置功能:免费,只支持XInput + JoyToKey:收费,不支持HID模式??(只在一台电脑上尝试过) #### 项目启动说明 + 请参考[<项目启动说明>](https://gitee.com/maoTVReporter/hup-utils-parent/blob/master/项目启动说明.md) #### 技术点/难点 + java+JNA+cpp + [cpp项目](https://gitee.com/maoTVReporter/JoystickCpp):完全零基础开始的clion+cpp+JNA简单项目 + `[hup-commons]` + .[**FileUtil**]:获取文件/快捷方式的图标和源文件路径 + .[**HRobotJni**]:java+JNI+cpp+winApi,实现之前纯java没有的功能,如:控制系统音量等 + `[hup-swing]` + .[**WindowEdgeHideHelper**]:实现窗口在屏幕边缘时自动隐藏;类似QQ的效果 + .[**WindowBoundsAdjustor**]:用鼠标调节组件[位置,大小]的控制器 + .[**KeyboardText,NotInputTextView**]:用于捕获/设置键盘快捷键的控件,支持设置[Window+D,Alt+F4]类型的快捷键 #### 截图