Ищем изображение из уже готового скриншота(тестировал на WoW). Все зависит только от скорости создания скрина. Но это хоть какое-то заменение захвату DirectX :whistle: В принципе можно прикрутить к какой-нибудь программе для создания ScreenShot'ов в фоне 
http://autoit-script.ru/index.php/topic,4462.0.html - поиск пикселей
+
http://autoit-script.ru/index.php/topic,6254.0.html - поиск скринов по времени создания
=
Довольно медленно, но на WoW хватает

http://autoit-script.ru/index.php/topic,4462.0.html - поиск пикселей
+
http://autoit-script.ru/index.php/topic,6254.0.html - поиск скринов по времени создания
=
Код:
#include <GDIPlus.au3>
#include <WinAPIEx.au3>
#Include <Array.au3>
#Include <File.au3>
Global $inputDir = "Screenshots" ; Папка со сриншотами
Global $pixel ; Искомый пиксель
Global $mask = '*.jpg'
Global $status = False
;~ Проверка времени
$timer =0
$iTimer = TimerInit()
For $j = 1 To 99
_ScreenshotPixelSearch(300, 550, 400, 600, 0x00FFFF) ; - так выглядит запрос
ToolTip ($j, 0, 0)
Next
$timer = TimerDiff($iTimer) / $j
MsgBox(0, "Выполнено " & $j & " раз","Среднее время выполнения " & $timer &"мс")
Func _ScreenshotPixelSearch($x1, $y1, $x2, $y2, $color)
$fileList = _FileListToArray($inputDir, $mask, 1)
If IsArray($fileList) And $fileList[0] > 0 Then
Dim $aTmp[UBound($fileList)][2]
For $i = 1 To $fileList[0]
$aTmp[$i][1] = $inputDir & '\' & $fileList[$i]
$aTmp[$i][0] = FileGetTime($aTmp[$i][1], 0, 1)
Next
_ArraySort($aTmp, 1, 1)
;~ Присваиваем имя скрина
$screen = $aTmp[1][1]
$status = True
;~ Удаляем старые скриншоты
If $fileList[0] > 0 Then
For $j = 2 To $fileList[0]
FileDelete($aTmp[$j][1])
Next
EndIf
EndIf
If $status Then
$pixel = _PixelSearch($screen, $x1, $y1, $x2, $y2, $color)
If Not @error Then Return $pixel
;~ MsgBox(0, "", "Искомый пиксель " & $pixel[0] &"x"& $pixel[1] & " " & $screen)
EndIf
;~ MsgBox(0, "Error", "Ошибка функции ScreenshotPixelSearch")
Return SetError(1)
EndFunc
Func _PixelSearch($hImage, $x1, $y1, $x2, $y2, $color, $step=1)
If $x1 > $x2 Or $y1 > $y2 Then ; Ошибка в координатах
MsgBox(0, "Error", "Проверьте координаты! - " & $x1 &"x"& $x2 &" "& $y1 &"x"& $y2)
Return SetError(1)
EndIf
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($hImage)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
$hBMP =_GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$ARGB = _WinAPI_IntToDWord(BitOR($color, 0xFF000000))
$L1 = $iWidth*($y1-1)+$x1
$L2 = $iWidth*($y2-1)+$x2
$L = $iWidth * $iHeight
$tBits = DllStructCreate('dword[' & $L & ']')
_WinAPI_GetBitmapBits($hBMP, 4 * $L, DllStructGetPtr($tBits))
_GDIPlus_Shutdown()
$Offset = -1
For $i = $L1 To $L2 Step $step
If DllStructGetData($tBits, 1, $i) = $ARGB Then
$Offset = $i
ExitLoop
EndIf
Next
_WinAPI_DeleteObject($hBMP)
_WinAPI_DeleteObject($tBits)
If $Offset = -1 Then
Return SetError(1)
Else
$x = Mod($Offset, $iWidth)
$y = Ceiling($Offset / $iWidth)
Local $coord[2] = [$x, $y]
Return $coord
EndIf
EndFunc
Довольно медленно, но на WoW хватает
