一个窗口的完整屏幕截图

时间:2011-10-31 16:15:25

标签: delphi winapi screenshot

我正在使用此代码创建指定窗口的屏幕截图(有效或无效)

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 个答案:

答案 0 :(得分:2)

查看PrintWindow()函数,而不是直接使用BitBlt()。尽管它的名称,PrintWindow()可用于捕获位图的截图,但它不仅限于打印。