窗口的完整屏幕截图
问题描述:
我正在使用此代码创建指定窗口的屏幕截图(无论是否激活)。窗口的完整屏幕截图
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;
现在我们假设窗口有一个组合框。当我点击组合框并展开列表时,列表内容不包含在我的屏幕截图中。
你知道任何方法来创建一个完整的窗口截图吗?
答
看看PrintWindow()
函数,而不是直接使用BitBlt()
。尽管它的名字,PrintWindow()
可以用于抓取截图到位图,但不仅限于打印。
+0
谢谢,但问题仍然存在。我尝试了两种方法。 – Pateman
Alt + PtrScr未被使用的任何原因? – xentoo
我想以编程方式创建一个窗口的屏幕截图,这就是为什么。 – Pateman
你可以做任何全屏捕捉,然后使用窗口的坐标来挖出你想要的东西。 –