做窗口自动化时,截图不一定要截整块屏幕。已经拿到窗口句柄以后,可以先截取目标窗口,再裁剪其中一小块区域,用于状态判断、OCR、找图或保存局部画面。

这篇保留一个 Gdip 后台区域截图函数。它适合传统桌面窗口的轻量截图需求:先传入窗口句柄,再给出屏幕坐标系下的 xywh。函数会把坐标换算成窗口内部位置并返回裁剪后的位图。

适合哪些场景

  • 只识别窗口中的固定区域,减少后续找图和 OCR 的计算量。
  • 保存某个窗口的局部状态,例如文本区域、按钮区域或游戏画面小区域。
  • 给 FindText、OCR 或颜色判断准备截图素材。

使用时注意

  • 传入的是窗口句柄,不是窗口标题。可以用 WinGetMouseGetPos 获取。
  • 示例坐标按屏幕模式理解。窗口移动以后,要重新换算目标区域。
  • 后台截图能否拿到真实画面,取决于窗口类型和渲染方式。硬件加速、最小化窗口和游戏画面要实际测试。
  • 返回的位图使用完成后,调用方还要负责释放。

代码示例

; 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
}

 

所需依赖库下载:

Gdip.ahk库

 

 

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。