做窗口自动化时,截图不一定要截整块屏幕。已经拿到窗口句柄以后,可以先截取目标窗口,再裁剪其中一小块区域,用于状态判断、OCR、找图或保存局部画面。
这篇保留一个 Gdip 后台区域截图函数。它适合传统桌面窗口的轻量截图需求:先传入窗口句柄,再给出屏幕坐标系下的 x、y、w、h。函数会把坐标换算成窗口内部位置并返回裁剪后的位图。
适合哪些场景
- 只识别窗口中的固定区域,减少后续找图和 OCR 的计算量。
- 保存某个窗口的局部状态,例如文本区域、按钮区域或游戏画面小区域。
- 给 FindText、OCR 或颜色判断准备截图素材。
使用时注意
- 传入的是窗口句柄,不是窗口标题。可以用
WinGet或MouseGetPos获取。 - 示例坐标按屏幕模式理解。窗口移动以后,要重新换算目标区域。
- 后台截图能否拿到真实画面,取决于窗口类型和渲染方式。硬件加速、最小化窗口和游戏画面要实际测试。
- 返回的位图使用完成后,调用方还要负责释放。
代码示例
; Hwnd 窗口句柄,可用右侧命令或其他方法获取:MouseGetPos, , , OutputVarWin
; x,y,w,h 基于coormode模式下screen的坐标模式
#Include <Gdip>
后台指定区域截图(Hwnd,x,y,w,h){
pToken:= Gdip_Startup()
pBitmap:= Gdip_BitmapFromHWND(Hwnd,1)
WinGetPos, winx, winy, winw, winh, ahk_id %Hwnd%
x:=abs(x-winx),y:=abs(y-winy)
pCropped:= Gdip_CloneBitmapArea(pBitmap, x, y, w, h)
Gdip_DisposeImage(pBitmap)
Gdip_Shutdown(pToken)
Return pCropped
}
所需依赖库下载:
站内延伸
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
