
滚轮
滚轮是鼠标上极其常用的一个部件
(妙控鼠标:?)
偏偏滚轮又很容易坏
这不,刚换了个公司,鼠标滚轮没两天就坏了
看着小米mimo那个用不完的额度
一个想法冒出头来
整理一下
说干就干,让deepseek整理需求,
我们要的是一个全局的悬浮窗
他有向上向下两个箭头,点击向上就是滚轮往上
然后可以拖动位置
然后为了方便,再加一个中键摁住拖动
向上就是向上
(中键?哪来的中键?)
没错!滚轮是可以摁下去的,那个就是中键!
然后还要一个开机自启,再来一个滚动行数可配置
当然,一步到位直接覆盖3端
齐活,整理完了,让deepseek输出提示词
顺便起了个名字
提示词
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| 请帮我用 Flutter 开发一个桌面软件(同时支持 Windows、macOS、Linux)。
【软件名称】 轻舟 / Skiff
【核心功能】 鼠标滚轮坏了的时候,用来模拟滚轮滚动。
【功能一:悬浮双区域按钮】 一个圆角矩形的悬浮条,分成上下两个独立区域:
┌─────────┐ │ ▲ │ ← 点击向上滚动 ├─────────┤ │ ▼ │ ← 点击向下滚动 └─────────┘
设计要求: - 整体尺寸:宽50px,高80px,圆角12px - 背景色:半透明深灰色(rgba(40,40,40,0.7)) - 鼠标悬停时背景变亮(rgba(60,60,60,0.8)) - 两个区域之间有细分割线 - 图标:上区域显示向上箭头(Icons.arrow_upward),下区域显示向下箭头(Icons.arrow_downward) - 整体可拖拽移动位置 - 拖拽时不会误触发点击滚动
滚动行为: - 每次点击滚动3行 - 滚动平滑自然
【功能二:中键手势滚动(新逻辑)】 操作方式: 1. 按住鼠标中键 2. 向上移动鼠标(移动距离超过阈值,例如20像素) 3. 松开中键 → 触发一次向上滚动 4. 同理,按住中键向下移动超过阈值 → 松开后触发一次向下滚动
注意: - 是“移动+松开”触发一次滚动,不是连续滚动 - 需要设置移动距离阈值,避免轻微抖动就触发 - 移动未超过阈值就松开,不触发任何滚动 - 需要全局监听(软件在后台也能用)
【系统托盘】 - 软件启动后只在系统托盘显示图标,不显示主窗口 - 右键点击托盘图标弹出菜单:显示/隐藏悬浮按钮、退出软件 - 悬浮按钮默认显示在屏幕右下角 - 启动时默认显示悬浮按钮
【跨平台要求】 - 同时支持 Windows、macOS、Linux - 打包成独立可执行文件,用户无需安装环境
【macOS特别说明】 - 需要辅助功能权限才能全局监听鼠标事件 - 请在代码中包含权限检测和引导申请
【技术实现建议】 - 悬浮窗口:使用 Overlay 或独立的无边框窗口(window_manager) - 全局鼠标监听:mouse_listener 或 flutter_global_hotkey - 模拟滚动:robotjs 或 native_toolchain_c - 系统托盘:tray_manager - 手势阈值判断:记录中键按下位置,松开时计算位移差
【代码要求】 - 提供完整的项目代码结构 - 包含所有必要的配置文件(pubspec.yaml、platform相关配置) - 添加详细注释 - 提供打包命令说明
【兼容性说明】 - 滚轮模拟功能在所有场景下都能正常工作,包括: - 浏览器中按住Ctrl+滚轮缩放图片/页面时 - 地图、设计软件、图片查看器等支持滚轮缩放的应用 - 游戏、远程桌面等 - 原理:模拟的是原生系统级滚轮事件,目标应用收到的是真实滚轮信号
【中键手势冲突处理】 - 按住中键→移动→松开 触发滚动的功能,可能与部分软件的中键原生功能冲突 - 冲突场景:Figma/Blender(中键拖拽平移)、浏览器(中键开新标签页)、IDE(中键多光标) - 请添加一个托盘菜单开关:☑ 启用中键手势 - 默认开启,用户遇到冲突时可关闭,仅使用悬浮按钮
【实现建议】 - 模拟滚动使用 robotjs 的 scrollMouse 方法 - 中键手势监听时,注意判断当前焦点窗口,避免在特定应用中自动禁用(可选高级功能)
|
开干
建好项目,丢给小米
慢慢蹬吧
当然没可能一把出
遇到的问题有,点击页面不滚动
悬浮窗抢焦点,拖拽卡顿
中键没效果等等
特别是抢焦点这个,mimo来来回回改了8版解决不了
最后使用 X11 Input Shape Passthrough — 临时将悬浮窗的输入区域设为空,
让鼠标事件穿透到下层窗口
中键也是,一致检测不到
最后XQueryPointer 轮询,每 10ms 检查
因为一开始只设计了上下两个箭头,事件冲突,所以拖拽卡顿
最后再加了一个按钮专门负责拖拽
勉强凑合能用,
具体修改可以看仓库里的文档
最后写好自动构建,推送完事
使用
请前往仓库地址查看
不过我只测试了ubuntu,win和mac 大概率都是有问题
(逃~)