用 Python 或 C++ 写自动化脚本,想让程序替人点一下按钮。老教程里都用 mouse_event 这个 Windows API,代码能跑,但微软早就标了过时。到底能不能继续用,得看你的场景。
mouse_event 是做什么的
它是 user32.dll 里的函数,能模拟鼠标移动、按下、抬起、滚轮,还能合成绝对坐标。参数里 dwFlags 决定动作类型,比如 MOUSEEVENTF_LEFTDOWN 按下左键、MOUSEEVENTF_LEFTUP 抬起、MOUSEEVENTF_MOVE 移动。它把动作直接注入系统输入流,目标程序分不清是人点还是程序点。
为什么说它过时了
微软官方文档里标注:这个函数已被 SendInput 取代,新代码不该再用。原因有二:mouse_event 的老签名里坐标是 DWORD,处理多显示器和高 DPI 时容易算错;SendInput 用 INPUT 结构数组,能一次提交键盘鼠标多个事件,更原子也更准。功能上能跑,长期维护建议换。
典型调用长这样
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);按下和抬起要成对写,否则鼠标会一直处于按住状态,脚本崩了都没释放。移动坐标前记得先 SetCursorPos,或者用 MOUSEEVENTF_ABSOLUTE 配合归一化坐标,否则点击位置会飘。
实际用的时候会遇到什么
- 游戏里无效:带反作弊的游戏会过滤合成输入,mouse_event 大概率被无视。
- 管理员权限:目标程序以管理员运行时,你的脚本也必须提权,否则事件送不进去。
- UAC 桌面:安全提示界面在独立桌面,普通进程模拟不了点击。
判断提醒:内部测试工具、批量点自家软件,mouse_event 够用且好写;要对新系统、多屏高 DPI 或游戏做自动化,直接上 SendInput,别在过时 API 上耗时间。