You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

错误说明

  1. 变量名误用:picy := y - mouseareax 中误用了x方向的范围变量,导致y方向坐标计算错误,改为mouseareay后才能得到正确的垂直范围。
  2. 边界计算错误:原代码将超出屏幕的边界坐标设为0,导致截图区域完全错误。修正后保持截图的目标宽度/高度不变,仅调整起始坐标以贴合屏幕边缘。
  3. 函数调用错误:原代码用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)

原理说明

  1. 通过GetCursorInfo获取光标在屏幕上的绝对坐标,减去截图区域的起始坐标picx和picy,得到光标在截图内的相对位置。
  2. 使用Gdip_DrawImage将光标直接绘制到截图的对应位置,精准保留点击时的光标状态。

内容的提问来源于stack exchange,提问作者user23704875

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:28:09