大量重复的图形界面操作和数据搬运只能人工做:每天定时截屏留证、批量点开同一个软件点同一串按钮、把手机里的文件倒到电脑上、把设备日志抓下来排查。这些活不难但耗人,做久了还容易点错。
本项目实现让程序替人操作电脑:截屏 → 定位目标 → 点击 → 再截屏验证,形成闭环;同时通过 ADB 无线调试打通手机,实现远程截屏、界面层级导出、双向文件传输和日志抓取,真正跨端。
大量重复的图形界面操作和数据搬运只能人工做:每天定时截屏留证、批量点开同一个软件点同一串按钮、把手机里的文件倒到电脑上、把设备日志抓下来排查。这些活不难但耗人,做久了还容易点错。
本项目实现让程序替人操作电脑:截屏 → 定位目标 → 点击 → 再截屏验证,形成闭环;同时通过 ADB 无线调试打通手机,实现远程截屏、界面层级导出、双向文件传输和日志抓取,真正跨端。
1. 截屏模块:ctypes 直调 GDI 的 StretchBlt + GetDIBits 完成抓屏与缩放;解决 64 位下句柄溢出(每个 API 显式声明 argtypes/restype);解决 GDI 不写 alpha 通道导致读图全白的问题(手动补 alpha);纯标准库手写 PNG 编码。
2. 鼠标键盘模块:SetCursorPos + mouse_event / keybd_event 实现点击、拖拽、组合键;确立"先激活目标窗口再操作"的约束,避免误操作到其他程序。
3. 控件定位模块:用 UI Automation 读原生应用的控件树,直接拿控件名与精确坐标并触发点击,免去像素级猜坐标。
4. 中文输入:绕开输入法限制,通过剪贴板完成中文文本注入。
5. 移动端模块:ADB 无线调试(WiFi 配对)连接安卓设备,实现远程截屏、界面层级导出、双向文件传输、日志抓取。
6. 权限边界:定位并记录安卓端模拟点击被 INJECT_EVENTS 权限拒绝的问题,改用"界面层级 + 应用内可点控件"的替代方案。
被追问时的答案:为什么不用现成图形库 —— 目标环境装不了第三方包;定位方案怎么选 —— 原生应用走 UI Automation(快且准),Electron/Chromium 类应用不暴露控件树,退化为截图定位。