Lecdev Posted June 30, 2015 Share Posted June 30, 2015 ive had a quick look but couldnt find a direct answer for this, i need to capture an area of a window as an image and save it but my problem is it is very likely that the window i want to capture will have something overlapping it on screen or the user account will be locked and the logon screen will be showing, I know if i use screen capture it will capture the overlapping window or logon screen. Is there a way I can capture an image of the window without capturing something that is displaying on top of it? Link to comment Share on other sites More sharing options...
UEZ Posted June 30, 2015 Share Posted June 30, 2015 Try this _WinAPI_CreateBitmapFromPrintWindow function:expandcollapse popup#include <Array.au3> #include <GDIPlus.au3> #include <WinAPIGdi.au3> Global $aWinList = WinList("[REGEXPTITLE:(?i)(.*SciTE.*|.*Internet Explorer.*)]") If Not IsArray($aWinList) Then Exit _GDIPlus_Startup() Global $sFile = @ScriptDir & "\Test.jpg" Global $hBitmap = _WinAPI_CreateBitmapFromPrintWindow($aWinList[Random(1, UBound($aWinList) - 1, 1)][1]) _GDIPlus_ImageSaveToFile($hBitmap, $sFile) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_Shutdown() ShellExecute($sFile) Func _WinAPI_CreateBitmapFromPrintWindow($hWnd, $bCrop = True, $bClient = False, $bBmpGDI = False) Local $aWinSize = WinGetPos($hWnd) Local Const $hDC_Capture = _WinAPI_GetDC($hWnd) Local Const $hMemDC = _WinAPI_CreateCompatibleDC($hDC_Capture) Local Const $hHBmp = _WinAPI_CreateCompatibleBitmap($hDC_Capture, $aWinSize[2], $aWinSize[3]) Local Const $hObjectOld = _WinAPI_SelectObject($hMemDC, $hHBmp) _WinAPI_SetStretchBltMode($hDC_Capture, $HALFTONE) _WinAPI_PrintWindow($hWnd, $hMemDC, $bClient) _WinAPI_DeleteDC($hMemDC) _WinAPI_SelectObject($hMemDC, $hObjectOld) _WinAPI_ReleaseDC($hWnd, $hDC_Capture) Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp) _WinAPI_DeleteObject($hHBmp) If $bCrop Then Local $hBitmap_Cropped = _GDIPlus_BitmapCloneArea($hBitmap, 8, 8, $aWinSize[2] - 16, $aWinSize[3] - 16) _GDIPlus_BitmapDispose($hBitmap) $hBitmap = $hBitmap_Cropped EndIf If $bBmpGDI Then Local $hBitmap_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hBitmap_GDI EndIf Return $hBitmap EndFuncThe _WinAPI_PrintWindow function captures the window but not in its original look! Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Lecdev Posted June 30, 2015 Author Share Posted June 30, 2015 Thanks UEZ Ive run a few tests and this seems to be perfect! 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