详情
评论
问答

多窗口鼠标同步点击器(Python 源码,支持网游四开)

分享一套 Python 编写的多窗口鼠标同步点击器源码:在主窗口点击鼠标时,同时向其它几个窗口后台发送点击消息,最多支持 4 个窗口,典型用途就是网游四开时同步操作四个号。它的关键点在于用 PostMessage 投递消息,不会抢走窗口焦点,所以四个窗口可以并排同时响应。

效果预览

功能特性

  • 四窗口同步:最多配置 4 个窗口,主窗口点击时同步到其余已启用的窗口;
  • 后台点击不抢焦点:通过 PostMessage 发送 WM_LBUTTONDOWN / WM_LBUTTONUP,目标窗口不需要被激活;
  • 支持像素偏移:每个窗口可单独设置 X / Y 偏移,适配窗口位置不一致的情况;
  • 可视化配置:tkinter 图形界面,下拉框直接选择当前打开的窗口;
  • 运行日志:实时输出每一步的点击坐标与发送结果,方便排查。

运行环境与依赖

  • Windows 系统(依赖 win32gui / win32api 等 Windows API);
  • Python 3.x;
  • 两个第三方库:pywin32 与 pynput。
pip install pywin32 pynput

使用步骤

  1. 安装依赖:pip install pywin32 pynput;
  2. 运行脚本,弹出「多窗口同步点击模拟器」窗口;
  3. 点击刷新窗口列表,拉取当前所有可见窗口;
  4. 在 4 行配置里分别选择窗口、填写 X / Y 偏移,并勾选启用;
  5. 点击启动监听,此后在第一个启用的窗口中点击鼠标,其余窗口会同步收到点击;
  6. 用完后点停止监听(关闭窗口也会自动停止)。

实现原理:为什么“不抢焦点”

常规模拟点击会调用 SetForegroundWindow 把目标窗口切到前台,导致窗口之间来回抢焦点、根本没法多开。这里的做法是:

  • 用 win32gui.GetWindowRect(hwnd) 拿到目标窗口位置,把屏幕坐标换算成该窗口的客户区坐标;
  • 用 win32api.MAKELONG(x, y) 打包成 lParam;
  • 用 win32gui.PostMessage() 直接向窗口消息队列投递 WM_LBUTTONDOWN 和 WM_LBUTTONUP(中间隔 20ms 模拟按下再抬起)。

消息是“投递”进去的,窗口不需要被激活,因此四个窗口可以并排同时响应。另外代码里用 is_simulating 标志位过滤掉自己发出的模拟事件,避免递归触发。

完整源码

注意事项

  • 仅支持 Windows,且必须安装 pywin32 与 pynput,缺任一个都会弹窗提示;
  • 偏移量单位是像素,按实际窗口摆放位置调整,填错会导致点击位置偏移;
  • 部分程序(尤其是 DirectX 全屏游戏)可能不响应 PostMessage 投递的消息,此时同步无效,属正常现象;
  • 合规风险提醒:在网游中使用同步点击类工具,可能违反游戏的用户协议,存在封号风险。本文定位于 Python 自动化与 Windows 消息机制的学习研究,是否使用及由此产生的后果由使用者自行承担;
  • 本工具为开源 Python 源码,可自行审计代码,相比来源不明的 exe 更安全;运行前建议用杀毒软件扫描一遍。

常见问题

点击没同步到其他窗口?

先确认目标行已勾选启用且选择了窗口;再看该程序是否响应 PostMessage——部分全屏游戏会忽略后台消息,这种情况属正常现象。

提示缺少依赖库怎么办?

按提示执行 pip install pywin32 pynput 后重新运行即可。

同步位置总是偏?

调整对应窗口的 X / Y 偏移量,它表示相对点击位置的横纵偏移像素数。

最多只能四个窗口吗?

当前版本界面固定 4 行配置。需要更多可自行扩展代码里 for row in range(4) 的循环次数。

文章版权声明 1、本网站名称:小洋筑记
2、本站永久网址:https://www.xiaouc.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容