Mega Code Archive

 
Categories / Delphi / Ide Indy
 

How to Capture the Screen Shot of the Active Window from Delphi Code

Title: How to Capture the Screen Shot of the Active Window from Delphi Code Need to take a screen shoot from code? No problem ... here's how to capture the Windows desktop or the Active Window's image into a TBitmap object - and display it inside a TImage control. Drop a TImage on a Form and use the following code: procedure ScreenShot(activeWindow: bool; destBitmap : TBitmap) ; var w,h : integer; DC : HDC; hWin : Cardinal; r : TRect; begin if activeWindow then begin hWin := GetForegroundWindow; dc := GetWindowDC(hWin) ; GetWindowRect(hWin,r) ; w := r.Right - r.Left; h := r.Bottom - r.Top; end else begin hWin := GetDesktopWindow; dc := GetDC(hWin) ; w := GetDeviceCaps (DC, HORZRES) ; h := GetDeviceCaps (DC, VERTRES) ; end; try destBitmap.Width := w; destBitmap.Height := h; BitBlt(destBitmap.Canvas.Handle, 0, 0, destBitmap.Width, destBitmap.Height, DC, 0, 0, SRCCOPY) ; finally ReleaseDC(hWin, DC) ; end; end; Usage: var b:TBitmap; begin b := TBitmap.Create; try ScreenShot(TRUE, b) ; Image1.Picture.Bitmap.Assign(b) ; finally b.FreeImage; FreeAndNil(b) ; end; Note: the first parameter in the TakeShot is a bool value indicating whether to take a screen shot of the active window or to grab what's currently on the desktop window. For an example application, download the source code.