实现了一个小型屏幕区域的变动检测功能,通过定时截图和图像比对,检测屏幕指定区域内的静止时间,并在区域保持静止指定时间后触发提示。
所需依赖库下载:
屏幕部分位置静止检测.ahk
; #Include <Gdip_All> /* 截图部分取自天黑请闭眼的截图gdpi示例 此脚本仅检测屏幕左上角一小块部分 可以用左上角桌面图标来回拖放测试 个人测试环境: windows10 , AutoHotkeyL v1.1.33.05 U32 */ main: ; msgbox, % A_AhkVersion if (!pToken:=Gdip_Startup()) { msgbox, 错误`nGDIP无法载入 exitapp } CoordMode, tooltip, screen CoordMode, pixel, screen if (checkChange(10, 10, 50, 50, 10000)) { msgbox, 检测位置10秒无变动 } return capture(_x, _y, _w, _h) { chdc:=CreateCompatibleDC() hbm:=CreateDIBSection(_w, _h, chdc) obm:=SelectObject(chdc, hbm) hhdc:=hhdc ? hhdc : GetDC() BitBlt(chdc, 0, 0, _w, _h, hhdc, _x, _y, Raster) ; pBitmap:=Gdip_CreateBitmapFromHBITMAP(hbm) ReleaseDC(hhdc) SelectObject(chdc, obm) ; DeleteObject(hbm) DeleteDC(hhdc) DeleteDC(chdc) ; Gdip_SaveBitmapToFile(pBitmap, saveFile, 100) ; Gdip_DisposeImage(pBitmap) return hbm } imgSearchBool(_x, _y, _w, _h, file) { ImageSearch, x, y, % _x, % _y, % _w, % _h, % file ; tooltip % _x "-" _y "-" _w "-" _h if (ErrorLevel = 2) { throw "截图错误" } if (!ErrorLevel) return {x:x,y:y} return "" } checkChange(_x, _y, _w, _h, timeOut) { found := false needCap := true startTimeCheck := False loop { if (needCap) { hBmp := capture(_x, _y, _w, _h) ; msgbox, % hBmp sleep, 100 } found := imgSearchBool(_x - 10 , _y - 10 , _w + 10, _h + 10, "hbitmap:*" hBmp) if (found) { startTimeCheck := true needCap := false if (not t) { t := A_TickCount } } else { DeleteObject(hbm) needCap := true t := 0 startTimeCheck := false } if (startTimeCheck) { tooltip, % "检测部分静止时间:" (A_Tickcount - t) "毫秒", 20, % A_ScreenHeight // 2 sleep, 100 if (A_Tickcount - t > timeOut) { ; 图像静止状态持续 timeOut 毫秒以上 return true } } } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)