如何用AutoHotkey捕获鼠标周围包含光标的小截图?
问题解决:AutoHotkey 截图捕获光标与 CaptureScreen.ahk 调用错误
一、修复 CaptureScreen.ahk 的坐标处理与调用问题
你的 CaptureScreen 代码存在三个核心错误:变量名误用、边界计算逻辑错误、函数调用语法错误,修正后即可正常生成截图:
修正后的代码
F1:: MouseGetPos, x, y mouseareax := 150 mouseareay := 250 ; 修正变量名错误:y方向应该用mouseareay而非mouseareax picx := x - mouseareax picy := y - mouseareay picx2 := x + mouseareax picy2 := y + mouseareay targetWidth := mouseareax * 2 targetHeight := mouseareay * 2 ; 修复x方向边界逻辑 if (picx < 0) { picx := 0 picx2 := targetWidth } else if (picx2 > A_ScreenWidth) { picx2 := A_ScreenWidth picx := A_ScreenWidth - targetWidth } ; 修复y方向边界逻辑 if (picy < 0) { picy := 0 picy2 := targetHeight } else if (picy2 > A_ScreenHeight) { picy2 := A_ScreenHeight picy := A_ScreenHeight - targetHeight } ; 直接调用CaptureScreen函数,无需拼接带引号的字符串 CaptureScreen(picx, picy, picx2, picy2, "screen.png") ; 如果你的CaptureScreen要求第一个参数是坐标字符串,改用下面这行: ; CaptureScreen(picx "," picy "," picx2 "," picy2, "screen.png") return
错误说明
- 变量名误用:
picy := y - mouseareax中误用了x方向的范围变量,导致y方向坐标计算错误,改为mouseareay后才能得到正确的垂直范围。 - 边界计算错误:原代码将超出屏幕的边界坐标设为0,导致截图区域完全错误。修正后保持截图的目标宽度/高度不变,仅调整起始坐标以贴合屏幕边缘。
- 函数调用错误:原代码用
msgbox包裹函数调用,且错误地传递带引号的字符串参数。直接传入四个坐标数值即可(或根据CaptureScreen的定义传入坐标字符串)。
二、GDI+ 截图添加鼠标光标(精准定位点击点)
如果想继续使用GDI+并捕获光标,可以通过GetCursorInfo获取光标位置和句柄,再将光标绘制到截图上,无需替换光标图片:
完整代码
picx := 150, picy := 150, picx2 := 400, picy2 := 400 pToken := Gdip_Startup() ; 截取屏幕区域 snap := Gdip_BitmapFromScreen(picx "|" picy "|" picx2 "|" picy2) hGraphics := Gdip_GraphicsFromImage(snap) ; 获取光标信息 VarSetCapacity(CURSORINFO, 24, 0) NumPut(24, CURSORINFO, 0, "UInt") GetCursorInfo(&CURSORINFO) cursorX := NumGet(CURSORINFO, 8, "Int") - picx cursorY := NumGet(CURSORINFO, 12, "Int") - picy hCursor := NumGet(CURSORINFO, 16, "Ptr") ; 将光标绘制到截图上 Gdip_DrawImage(hGraphics, hCursor, cursorX, cursorY) ; 保存并释放资源 Gdip_SaveBitmapToFile(snap, "Shot.png") Gdip_DeleteGraphics(hGraphics) Gdip_DisposeImage(snap) Gdip_Shutdown(pToken)
原理说明
- 通过
GetCursorInfo获取光标在屏幕上的绝对坐标,减去截图区域的起始坐标picx和picy,得到光标在截图内的相对位置。 - 使用
Gdip_DrawImage将光标直接绘制到截图的对应位置,精准保留点击时的光标状态。
内容的提问来源于stack exchange,提问作者user23704875
相关产品推荐
相关产品推荐

