Newsgroups : Borland : borland.public.delphi.nativeapi.win32 : 2005 Oct : Window Capture

www.cryer.info
Managed Newsgroup Archive

Window Capture

Subject:Window Capture
Posted by:"michael" (mg..@handstars.com)
Date:Fri, 14 Oct 2005 13:51:29 +0700

Dear All,

How to capture images of a window ( as a whole ) when it is offscreen
Here is my code, it only takes images of window wherea they are visible in
the screen, when dragging the window off the screen ( some parts is hidden )
Capturing using the code, only captures the visible parts, the hidden parts
not painted to image handle


activeWindow := GetForegroundWindow;
dc := GetWindowDC(activeWindow);

  GetWindowRect(activeWindow,xRect);
  x := 0;
  y := 0;
  width := xRect.Right - xRect.Left;
  Height := xRect.Bottom - xRect.Top;

bm.Width := Width;
bm.Height := Height;
{get the screen dc}
if (dc = 0) then exit;

{do we have a palette device?}
if (GetDeviceCaps(dc, RASTERCAPS) AND RC_PALETTE = RC_PALETTE) then begin
    {allocate memory for a logical palette}
    GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
    {zero it out to be neat}
    FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)),
#0);
    {fill in the palette version}
    lpPal^.palVersion := $300;
    {grab the system palette entries}
    lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256,
lpPal^.palPalEntry);
    if (lpPal^.PalNumEntries <> 0) then begin
        {create the palette}
        bm.Palette := CreatePalette(lpPal^);
    end;
    FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
end;

{copy from the screen to the bitmap}
BitBlt(bm.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY);
{release the screen dc} ReleaseDc(0, dc);
  image1.Picture.Bitmap := bm;

Glossary

Replies:

www.cryer.info
Managed Newsgroup Archive