robotjs0.6.0鼠标中轴滚动失效修复方案

问题根源

在 Windows 10/11 系统上,RobotJS 0.6.0 的 scrollMouse 方法存在一个已知 Bug ,可能会导致滚动完全失效。

原代码在 Windows 上会同时发送水平和垂直两个 SendInput 事件,导致系统无法正确处理。

解决方案

需要手动修改 node_modules\robotjs\src\mouse.c 文件,将同时发送改为分别发送每个方向的滚动事件。

要改的地方在 scrollMouse(int x, int y) 函数里的 Windows 分支,也就是你贴的代码最后这一段:

c 复制代码
#elif defined(IS_WINDOWS)

    mouseScrollInputs[0].type = INPUT_MOUSE;
    // ...
    mouseScrollInputs[1].type = INPUT_MOUSE;
    // ...
    SendInput(2, mouseScrollInputs, sizeof(mouseScrollInputs));
#endif

问题就在最后这一行:

c 复制代码
SendInput(2, mouseScrollInputs, sizeof(mouseScrollInputs));

它一次性把"水平滚动"和"垂直滚动"两个鼠标输入一起提交,Windows 下容易导致滚轮事件失效或被吞掉。

最小修改

把最后这一行:

c 复制代码
SendInput(2, mouseScrollInputs, sizeof(mouseScrollInputs));

改成两次单独发送:

c 复制代码
SendInput(1, &mouseScrollInputs[1], sizeof(INPUT)); // 垂直滚轮
SendInput(1, &mouseScrollInputs[0], sizeof(INPUT)); // 水平滚轮

也就是先发垂直,再发水平。这样 Windows 才能正确识别滚轮。

修改后重新编译

改完 mouse.c 后,预编译的 .node 文件不会自动生效,需要重新编译:

bash 复制代码
npm rebuild robotjs

或者在 node_modules/robotjs 目录下:

bash 复制代码
npx node-gyp rebuild

然后再运行你的 JS 代码测试:

javascript 复制代码
const robot = require("robotjs");

robot.moveMouse(500, 300);
robot.scrollMouse(0, -120); // 向下滚动 步长至少120左右,太小会被 Windows 忽略

如果是在 Windows 下,改这里基本就是解决 scrollMouse 不生效的关键。

注意:如果滚动步长设置的值过小,会被Windows 忽略不生效

相关推荐
孟健1 小时前
Claude Code 同需求写两版对比:装不装 frontend-design 差多远?
前端·ai编程·claude
OpsEye2 小时前
大模型 Token 计量不准,是什么原因,怎么解决??
javascript·ai编程
梦de天空一米16883 小时前
【一个重复id让游戏卡在62%,聊聊配置表检查】
前端
ryn483983 小时前
01 一个功能模块,怎么分层才不乱
前端·ai编程·claude
Amos_Web3 小时前
通过 Rspack 源码学 Rust(五):读懂 Result 与问号运算符的错误返回
前端
杨航 AI3 小时前
JEV的用法
java·前端·数据库
Amos_Web3 小时前
Rspack 源码解析(三十五):rspack_error 如何用 miette 渲染带源码定位的错误链
前端
去伪存真3 小时前
高敏资产场景下的大模型协同设计架构
前端·agent
修炼的dance3 小时前
OCR预处理测了108组,纠斜去噪有用,坑在顺序和力度
前端
疯华整猫3 小时前
Android 16 后台常驻适配:用 Trae 搭一套“前台服务 + 加急 Job”的可存活架构
前端