实现了一个小型屏幕区域的变动检测功能,通过定时截图和图像比对,检测屏幕指定区域内的静止时间,并在区域保持静止指定时间后触发提示。

 

所需依赖库下载:

Gdip.ahk库

 

屏幕部分位置静止检测.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
      }
    }
  }

}

 

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