Если кратко, да.
Родной PixelGetColor может не подойти, если нужно много пикселей за один момент, или пиксели в окне не на переднем плане.
Тут вам помогут ф-ии, есть как минимум 3. В них взятие буфера экрана и взятие пикселя из буфера - отдельные действия.
0) встроенная команда PixelGetColor — 20-25 мс все вместе.
1) ф-ия с PrintWindow — буфер 0-100 мс в зависимости от размера окна, пиксель - 0.0040 мс
2) ф-ия с BitBlt — буфер 25-60 мс, пиксель - 0.0100 мс
3) Для десятков пикселей и меньше лучше подойдет ф-ия с GetDCEx - буфер - мгновенно, пиксель - 0.1000-0.3000 мс
4) Используя PrintWindow с LockBits — буфер 50-80, пиксель - 0.0012 (!) мс
#Include Gdip_All.ahk
SetBatchLines -1
pixelArray:=[]
pToken := Gdip_Startup()
stBitmap := A_TickCount
pBitmap := Gdip_BitmapFromScreen()
endBitmap := A_TickCount - stBitmap
stX := A_TickCount
width := Gdip_GetImageWidth(pBitmap)
height := Gdip_GetImageHeight(pBitmap)
E1 := Gdip_LockBits(pBitmap, 0, 0, width, height, Stride, Scan0, BitmapData)
endX := A_TickCount - stX
stPix := A_TickCount
loop % width
{
A_Index_X := A_Index-1
loop % height
pixelArray[A_Index_X, A_Index-1] := Gdip_GetLockBitPixel(Scan0, A_Index_X, A_Index-1, Stride)
}
endPix := A_TickCount - stPix
stY := A_TickCount
Gdip_UnlockBits(pBitmap, BitmapData)
Gdip_DisposeImage(pBitmap)
endY := A_TickCount - stY
Gdip_Shutdown(pToken)
msgbox % endBitmap "`n" endX "`n" (endPix) / (width * height) "`n" endY "`n" Format("0x{:x}", pixelArray[1000, 1000])