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 忽略不生效

相关推荐
彭亚川Allen1 小时前
从零手搓 RAG 之文档解析技术
前端·后端·架构
oicola2 小时前
Ant Design v5 vs Tailwind CSS:组件库与样式框架的终极对决
前端·css
溪语流沙2 小时前
【Web全栈进阶】Vue Router + Pinia:SPA路由与全局状态
前端·javascript·vue.js
ManageEngineITSM2 小时前
工单优先级怎么定?影响×紧急度矩阵的设计与落地方法
java·大数据·运维·前端·数据库·变更管理
智商网输送线配件2 小时前
电子制造零散耗材补货实战:小批量混批采购平台怎么选才不停机?
大数据·服务器·前端·数据库·自动化
梦帮科技2 小时前
Web 漏洞攻防深度:WAF 规则逃逸技术(畸形分块传输、双重编码)与对抗加固
linux·前端·网络安全·ssl·web
兰亭妙微UI设计公司2 小时前
兰亭妙微软件界面设计公司的解锁按钮设计10大密码
开发语言·前端·javascript
迪幻2 小时前
封装自己的 npm 依赖并存储到个人 GitHub
前端·npm·github
u0111026753 小时前
WebP 转成 PNG 后为什么更大?图片格式转换不等于压缩
前端·javascript·vue.js