Тема: AHK: Определение изменений в определенной области экрана.
Здравствуйте. В определенной области экрана находится картинка с цифрой белого цвета (0хFFFFFF). Периодически эта цифра меняется на другую цифру(тоже белого цвета), это и нужно определить. Нашел вот такой скрипт:
c:
coords := [[1033,23],[1044,23],[1032,36],[1044,36],[1038,35]
,[1038,23]]
tooltip % res
res := PixelChecksum(coords)
F::
Loop
{
If (PixelChecksum(coords) != res)
{
tooltip, изменилась
Sleep 5000
goto c
return
}
else
tooltip, ne изменилась
return
PixelChecksum(coords) {
For k, v in coords
{
PixelGetColor, c, v[1], v[2]
sum .= c "|"
}
Return sum
}
}
return
Он работает, но не так быстро как нужно. Скрипт ниже через GDIP у меня отказывается работать, да и он не универсальный, как пишут (только на х32 работает). Нужно чтобы и на х64 и на х32 все работало.
; Example - Wait for a Screen Region to change
ChkSum := PixelChecksum( 0,0,10,10 )
While % ( ChkSum = PixelChecksum( 0,0,10,10 ) )
Sleep, 100
MsgBox, Screen Region Change Detected!
Return
PixelCheckSum( X, Y, W, H, Title ) {
hWn := WinExist( Title ), hDC := DllCall( "GetDC", UInt,hWn )
mDC := DllCall( "CreateCompatibleDC", UInt,hDC )
NumPut( VarSetCapacity(BI,40,0),BI ), NumPut( W,BI,4 ) , NumPut( H,BI,8 )
NumPut( 32,NumPut( 1,BI,12,"UShort" ),0,"UShort" ) , NumPut( 0,BI,16 )
hBM := DllCall( "CreateDIBSection", UInt,mDC, UInt,&BI , Int,0, UIntP,pB, Int,0,Int,0 )
oBM := DllCall( "SelectObject", UInt,mDC, UInt,hBM ) , Rop := 0x40000000|0x00CC0020
DllCall( "BitBlt", UInt,mDC, Int,0,Int,0, Int,W,Int,H, UInt,hDC, Int,X,Int,Y, UInt,Rop )
DllCall( "shlwapi\HashData", UInt,pB, UInt,W*H*4, Int64P,Hash, UInt,8 )
VarSetCapacity(HH,16,0), DllCall( "msvcrt\sprintf", Str,HH, Str,"%016I64X",UInt64,Hash )
DllCall( "DeleteObject", UInt,hBM ), DllCall( "DeleteObject", UInt,oBM )
DllCall( "DeleteDC", UInt,mDC ), DllCall( "ReleaseDC", UInt,hWn, UInt,hDC )
Return HH
}
Как еще можно определить изменение цифры? Нужно чтобы детект был практически мгновенным.