Полный скриншот окна - PullRequest
       0

Полный скриншот окна

1 голос
/ 31 октября 2011

Я использую этот код для создания скриншота указанного окна (активно или нет) .

function WndScreen(const h: HWND; const bmp: TBitmap): boolean;
var
  Src, Dst: HDC;
  R: TRect;
  Width, Height: Integer;
  B: HBITMAP;
  Old: HGDIOBJ;
begin
  Src := GetDC(h);
  GetWindowRect(h, R);
  Width := R.Right - R.Left;
  Height := R.Bottom - R.Top;
  Dst := CreateCompatibleDC(Src);
  B := CreateCompatibleBitmap(Src, Width, Height);
  Old := SelectObject(Dst, B);
  BitBlt(Dst, 0, 0, Width, Height, Src, 0, 0, SRCCOPY);
  SelectObject(Dst, Old);
  DeleteDC(Dst);
  ReleaseDC(h, Src);

  bmp.Width := Width;
  bmp.Height := Height;
  bmp.Handle := B;

  DeleteObject(B);
end;

Теперь предположим, что в окне есть выпадающий список.Когда я нажимаю на поле со списком и раскрываю список, содержимое списка не включается в мой снимок экрана.

Известен ли вам какой-либо способ создания полного снимка окна?

1 Ответ

2 голосов
/ 31 октября 2011

Взгляните на функцию PrintWindow() вместо непосредственного использования BitBlt().Несмотря на название, PrintWindow() может использоваться для захвата снимков экрана в растровое изображение, оно не ограничивается только печатью.

...