实现了一个小型屏幕区域的变动检测功能,通过定时截图和图像比对,检测屏幕指定区域内的静止时间,并在区域保持静止指定时间后触发提示。
所需依赖库下载:
屏幕部分位置静止检测.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
}
}
}
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(1)
好东西