no1Gun Posted January 5, 2010 Share Posted January 5, 2010 Hi. I was wondering if I would be able to do a pixelscan in a flashgame/window to retrieve a colour? You can see my script below - please tell me if there is anything bugged about it. expandcollapse popupOpt("TrayMenuMode", 1) opt("Pixelcoordmode", 2) opt("Mousecoordmode", 2) ;HotKeySet("{SPACE}", "Shoot") HotKeySet("{F10}", "Speed_pxcheck") HotKeySet("{F11}", "Direction_pxcheck") HotKeySet("{F6}", "Terminate") HotKeySet("{F7}", "Pause") While 1 WEnd ;Menu Loop Func Speed_pxcheck() $Speed_Check = PixelChecksum(1190, 425, 1190, 390) ;$ColorX, $ColorY, $ColorX, $ColorY MsgBox(0, "Colour Scan:", $Speed_Check) EndFunc Func Direction_pxcheck() $Direction_Check = PixelChecksum(1190, 390, 1190, 390) ;$ColorX, $ColorY, $ColorX, $ColorY MsgBox(0, "Colour Scan:", $Direction_Check) EndFunc ;Func Shoot() ;While 1 ;$Speed_Ctrl = PixelChecksum(1190, 425, 1190, 390) ;$ColorX, $ColorY, $ColorX, $ColorY ;If $Speed_Check <> $Speed_Ctrl Then MouseClick("Left") ;$Direction_Ctrl = PixelChecksum(1190, 390, 1190, 390) ;$ColorX, $ColorY, $ColorX, $ColorY ;If $Direction_Check <> $Direction_Ctrl Then MouseClick("Left") ;ExitLoop ;WEnd ;EndFunc Func Pause() $Pause = NOT $Pause While $Pause WEnd EndFunc Func Terminate() Exit 0 EndFunc Link to comment Share on other sites More sharing options...
no1Gun Posted January 5, 2010 Author Share Posted January 5, 2010 Is there no one who can help me? Allowed to bump a topic? Link to comment Share on other sites More sharing options...
James Posted January 5, 2010 Share Posted January 5, 2010 PixelSearch(), PixelGetColor() There. Blog - Seriously epic web hosting - Twitter - GitHub - Cachet HQ Link to comment Share on other sites More sharing options...
ofLight Posted January 5, 2010 Share Posted January 5, 2010 (edited) This is the method I use for pulling pixel info from Flash or Java based apps. expandcollapse popup;================================= oL_SaveScreen_ToHex ======================= ; Function Name: __oL_SaveScreen_ToHex ; Requires: <WinAPI.au3> ; Description: ; Parameters: $Array 2 deminsional Array of Hex Colors ; ; EG: $BitHex = _ScreenCapture_ToHex($pos[0]-25,$pos[1]-25,$pos[0]+25,$pos[1]+25) ; Syntax: _oL_SaveScreen_ToHex($Left,$Top,$Right,$Bottom) ; Author(s): ofLight ; Returns: $Array[$Total_X][$Total_Y] ;================================================================================= Func _oL_SaveScreen_ToHex($Left,$Top,$Right,$Bottom) $X = ($Right-$Left) $Y = ($Bottom-$Top) Dim $Output[($X+1)][($Y+1)] $Output[0][1] = $X ;How manny colomns $Output[1][0] = $Y ;How manny Rows $hBmp = _ScreenCapture("",$Left,$Top,$Right,$Bottom) $aSize = DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', 0, 'ptr', 0) If $aSize[0] Then $Bits = DllStructCreate('byte[' & $aSize[0] & ']') DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', $aSize[0], 'ptr', DllStructGetPtr($Bits)) $BitHex = Hex(DllStructGetData($Bits, 1)) EndIf _WinAPI_DeleteObject($hBmp) For $i = 1 to $X For $j = 1 to $Y $result = StringLeft($BitHex, 8) $Output[$i][$j] = $result $BitHex = StringTrimLeft($BitHex, 8) Next Next Return $Output EndFunc;========================== oL_SaveScreen_ToHex ======================= Edited January 5, 2010 by ofLight There is always a butthead in the crowd, no matter how hard one tries to keep them out.......Volly Link to comment Share on other sites More sharing options...
no1Gun Posted January 6, 2010 Author Share Posted January 6, 2010 (edited) This is the method I use for pulling pixel info from Flash or Java based apps. expandcollapse popup;================================= oL_SaveScreen_ToHex ======================= ; Function Name: __oL_SaveScreen_ToHex ; Requires: <WinAPI.au3> ; Description: ; Parameters: $Array 2 deminsional Array of Hex Colors ; ; EG: $BitHex = _ScreenCapture_ToHex($pos[0]-25,$pos[1]-25,$pos[0]+25,$pos[1]+25) ; Syntax: _oL_SaveScreen_ToHex($Left,$Top,$Right,$Bottom) ; Author(s): ofLight ; Returns: $Array[$Total_X][$Total_Y] ;================================================================================= Func _oL_SaveScreen_ToHex($Left,$Top,$Right,$Bottom) $X = ($Right-$Left) $Y = ($Bottom-$Top) Dim $Output[($X+1)][($Y+1)] $Output[0][1] = $X ;How manny colomns $Output[1][0] = $Y ;How manny Rows $hBmp = _ScreenCapture("",$Left,$Top,$Right,$Bottom) $aSize = DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', 0, 'ptr', 0) If $aSize[0] Then $Bits = DllStructCreate('byte[' & $aSize[0] & ']') DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', $aSize[0], 'ptr', DllStructGetPtr($Bits)) $BitHex = Hex(DllStructGetData($Bits, 1)) EndIf _WinAPI_DeleteObject($hBmp) For $i = 1 to $X For $j = 1 to $Y $result = StringLeft($BitHex, 8) $Output[$i][$j] = $result $BitHex = StringTrimLeft($BitHex, 8) Next Next Return $Output EndFunc;========================== oL_SaveScreen_ToHex ======================= This sounds helpful - but this is a lot more advanced scripting than what I am capable of understanding :S As said - I'm pretty new at this and what I understand, scripting wise, is very limited. Is there a way for you to possibly generate a scan where I could set the pixelcoords, that would be able to drag any colour results from a flash window onto a msgbox? Edited January 6, 2010 by no1Gun Link to comment Share on other sites More sharing options...
ofLight Posted January 18, 2010 Share Posted January 18, 2010 I dont fully understand what you are asking . I can provide basic Example Use code: expandcollapse popup#include <WinAPI.au3> #include <WindowsConstants.au3> #include <ScreenCapture.au3> #include <Array.au3> While 1 $pos = MouseGetPos() $pix = _oL_SaveScreen_ToHex($pos[0]-1,$pos[1]-1,$pos[0],$pos[1]) ;_ArrayDisplay($pix) ToolTip($pix[1][1]) Sleep(10) WEnd Func _oL_SaveScreen_ToHex($Left,$Top,$Right,$Bottom) $X = ($Right-$Left) $Y = ($Bottom-$Top) Dim $Output[($X+1)][($Y+1)] $Output[0][1] = $X ;How manny colomns $Output[1][0] = $Y ;How manny Rows $hBmp = _ScreenCapture("",$Left,$Top,$Right,$Bottom) ;$hBmp = _ScreenCapture_Capture("",$Left,$Top,$Right,$Bottom) $aSize = DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', 0, 'ptr', 0) If $aSize[0] Then $Bits = DllStructCreate('byte[' & $aSize[0] & ']') DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $hBmp, 'int', $aSize[0], 'ptr', DllStructGetPtr($Bits)) $BitHex = Hex(DllStructGetData($Bits, 1)) EndIf _WinAPI_DeleteObject($hBmp) For $i = 1 to $X For $j = 1 to $Y $result = StringLeft($BitHex, 8) $Output[$i][$j] = $result $BitHex = StringTrimLeft($BitHex, 8) Next Next Return $Output EndFunc Func _ScreenCapture($sFileName = "", $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1) Local $iH, $iW, $hWnd, $hDDC, $hCDC, $hBMP, $aCursor, $aIcon If $iRight = -1 Then $iRight = _WinAPI_GetSystemMetrics($SM_CXSCREEN) If $iBottom = -1 Then $iBottom = _WinAPI_GetSystemMetrics($SM_CYSCREEN) If $iRight < $iLeft Then Return SetError(-1, 0, 0) If $iBottom < $iTop Then Return SetError(-2, 0, 0) $iW = $iRight - $iLeft $iH = $iBottom - $iTop $hWnd = _WinAPI_GetDesktopWindow() $hDDC = _WinAPI_GetDC($hWnd) $hCDC = _WinAPI_CreateCompatibleDC($hDDC) $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iW, $iH) _WinAPI_SelectObject($hCDC, $hBMP) _WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, $iLeft, $iTop, $SRCCOPY) _WinAPI_ReleaseDC($hWnd, $hDDC) _WinAPI_DeleteDC($hCDC) If $sFileName = "" Then Return $hBMP _ScreenCapture_SaveImage($sFileName, $hBMP) _WinAPI_DeleteObject($hBMP) EndFunc There is always a butthead in the crowd, no matter how hard one tries to keep them out.......Volly Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now