Jump to content

PixelSearch a minimized window?


Recommended Posts

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. :)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 1 month later...

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

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...