手机端受系统限制,很多功能做不了。电脑端是这类工具真正好用的地方——窗口可控、可以多开、识别稳定。这篇讲清楚电脑端的技术细节和你该验什么。
这是新手最容易卡住的一关。你写个截屏程序,截别的窗口都正常,偏偏截扑克客户端是一张黑图。
原因是 Windows 有一个 API 叫 SetWindowDisplayAffinity,应用可以把自己标记成「禁止被截屏」。标记之后:
能,但要换思路。可行的方向是抓显示输出而不是抓窗口:从桌面 DC 直接拷贝当前屏幕像素,或者用桌面复制接口(Desktop Duplication)取整屏帧,再按窗口位置裁剪。
代价是:窗口被其他窗口遮住时,截到的是遮挡后的画面。所以要配合「窗口置顶」或者「按窗口矩形从整屏里裁」。
同样一个客户端,在 1920×1080 的显示器上是 100% 缩放,在 2560×1440 的笔记本上系统默认给你 125% 或 150%。这时牌面像素尺寸会变成 1.25 倍或 1.5 倍,所有按 100% 截的模板全部匹配失败。
| 解法 | 做法 | 优缺点 |
|---|---|---|
| 禁缩放 | 给程序加 DPI 感知声明,强制按物理像素工作 | 简单,但界面会变小,用户体验差 |
| 等比缩放模板 | 运行时按窗口宽度算缩放系数,把模板缩放到实际尺寸再匹配 | 通用,实现要对 |
| 现场标定 | 让用户自己截一张牌桌图,现场生成模板 | 最稳,但要交互 |
成熟的工具一般三种都用:默认等比缩放,匹配得分低于阈值时提示用户标定。
多开的核心问题是算力分配。四张桌子如果每张都按 30 帧/秒截屏识别,CPU 直接吃满。
优化到位的话,四开占用大约在单核 15%~25%,普通轻薄本都能扛。
电脑端相比手机端的最大优势是可以做浮层和热键。检查这几点:
WS_EX_TRANSPARENT 扩展样式。SetWindowDisplayAffinity 把自己标记成不参与截屏,这样别人截图、录屏都看不到面板。五项全过,这台机器上就算能用了。
问得最多的几个,直接给答案。
同一个工具的不同角度,点进去看细节。