Jump to content
Sign in to follow this  
Tinutron

PixelSearch a minimized window?

Recommended Posts

Tinutron

hello! I allready know, that it isnt possible to read colors out of an "invisible" window, but i've heard about a method, where people just take a screenshot(using a so called printscreen function) and and pixelsearch this screenshot right from the clipboard. now i have some questions: 1) does this work for opelgl/direct3d applications? 2) is it possible to take a screenshot from a hidden window? 3) can someone post a piece of code, so that it is a little easier for me to understand? i'm relatively new to autoit and this "advanced" functions overcharge me. would be very nice. :)

Share this post


Link to post
Share on other sites
oMBRa

I grabbed this somewhere in the forum, dont remember where

CODE

#include <GDIPlus.au3>

#include <WinAPI.au3>

#include <ScreenCapture.au3>

_GDIPlus_Startup()

;$hGUI = GUICreate("Screen Capture", 400, 300, @DesktopWidth, @DesktopHeight)

;GUISetState()

$hGUI = WinGetHandle("AutoIt Help")

WinMove($hGUI, "", @DesktopWidth, @DesktopHeight)

$iWidth = _WinAPI_GetWindowWidth($hGUI)

$iHeight = _WinAPI_GetWindowHeight($hGUI)

$hParent = GUICreate("WindowViewer", 500, 400)

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hParent)

GUISetState()

While 1

$hBMP = _WinCapture($hGUI, $iWidth, $iHeight)

$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)

_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight, 50, 50, 400, 300)

_GDIPlus_ImageDispose($hImage)

_WinAPI_DeleteObject($hBMP)

Sleep(1000)

WEnd

Func _WinCapture($hWnd, $iWidth = -1, $iHeight = -1)

Local $iH, $iW, $hDDC, $hCDC, $hBMP

If $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd)

If $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd)

$hDDC = _WinAPI_GetDC($hWnd)

$hCDC = _WinAPI_CreateCompatibleDC($hDDC)

$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)

_WinAPI_SelectObject($hCDC, $hBMP)

DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)

;_WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, 0, 0, 0x00330008)

_WinAPI_ReleaseDC($hWnd, $hDDC)

_WinAPI_DeleteDC($hCDC)

;_ScreenCapture_SaveImage(@DesktopDir&"\window.jpg", $hBMP)

;_WinAPI_DeleteObject($hBMP)

Return $hBMP

EndFunc ;==>_WinCapture

Share this post


Link to post
Share on other sites
koekje

I grabbed this somewhere in the forum, dont remember where

CODE

#include <GDIPlus.au3>

#include <WinAPI.au3>

#include <ScreenCapture.au3>

_GDIPlus_Startup()

;$hGUI = GUICreate("Screen Capture", 400, 300, @DesktopWidth, @DesktopHeight)

;GUISetState()

$hGUI = WinGetHandle("AutoIt Help")

WinMove($hGUI, "", @DesktopWidth, @DesktopHeight)

$iWidth = _WinAPI_GetWindowWidth($hGUI)

$iHeight = _WinAPI_GetWindowHeight($hGUI)

$hParent = GUICreate("WindowViewer", 500, 400)

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hParent)

GUISetState()

While 1

$hBMP = _WinCapture($hGUI, $iWidth, $iHeight)

$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)

_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight, 50, 50, 400, 300)

_GDIPlus_ImageDispose($hImage)

_WinAPI_DeleteObject($hBMP)

Sleep(1000)

WEnd

Func _WinCapture($hWnd, $iWidth = -1, $iHeight = -1)

Local $iH, $iW, $hDDC, $hCDC, $hBMP

If $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd)

If $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd)

$hDDC = _WinAPI_GetDC($hWnd)

$hCDC = _WinAPI_CreateCompatibleDC($hDDC)

$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)

_WinAPI_SelectObject($hCDC, $hBMP)

DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)

;_WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, 0, 0, 0x00330008)

_WinAPI_ReleaseDC($hWnd, $hDDC)

_WinAPI_DeleteDC($hCDC)

;_ScreenCapture_SaveImage(@DesktopDir&"\window.jpg", $hBMP)

;_WinAPI_DeleteObject($hBMP)

Return $hBMP

EndFunc ;==>_WinCapture

That's a great function, which works perfectly.

However i would also like to know whether it's possible to perform a pixelsearch variant on an image in memory (or file for that matter).

I could create a function that uses pixelgetcolor to simulate a pixelsearch, but this is far far slower

Share this post


Link to post
Share on other sites
oMBRa

search in the example forum... there is an UDF of Mandar to search pixel from memory

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.