服务端改一轮,就要真机走一遍「登录→建角色→进世界」。人工点太慢,图像识别太脆。我们用的是第三条路:纯 Win32 消息驱动真实客户端——不碰网络协议、不碰内存、不做进程介入,只是把用户的点击原样寄给窗口。
消息点击驱动
PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
PostMessage(hwnd, WM_LBUTTONUP, 0, MAKELPARAM(x, y));
PostMessage(hwnd, WM_CHAR, 't', 0); // 逐字符输入账号
关键性质:无需窗口在前台。整个验收跑在无人值守的服务器/后台里,宿主机照常干别的。
截图的垂直翻转坑
用 PrintWindow 抓帧做断言时,抓到的画面是垂直翻转的(DX9 后备缓冲拷贝的方向问题),坐标必须换算:
点击坐标 y = H − y_raw // y_raw 是截图里看到的行号
所有坐标断言统一走这个换算,别在个别调用点各改各的。
链路与看护进程
全链路:公告页→服务器列表→账密认证→建角色(表里落一条 uID=10000 的记录)→选人→进入世界,HUD 与键盘响应俱全。两个环境细节:加载器有父进程看护(宿主退它就退),无人值守要留长驻宿主;验证截图全部落盘,事后可审计。
这套驱动器后来成了每个服务端版本的出厂验收:改完跑一遍全链路,绿了才发版。