窗口的完整屏幕截图

问题描述:

我正在使用此代码创建指定窗口的屏幕截图(无论是否激活)窗口的完整屏幕截图

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; 

现在我们假设窗口有一个组合框。当我点击组合框并展开列表时,列表内容不包含在我的屏幕截图中。

你知道任何方法来创建一个完整的窗口截图吗?

+0

Alt + PtrScr未被使用的任何原因? – xentoo

+1

我想以编程方式创建一个窗口的屏幕截图,这就是为什么。 – Pateman

+0

你可以做任何全屏捕捉,然后使用窗口的坐标来挖出你想要的东西。 –

看看PrintWindow()函数,而不是直接使用BitBlt()。尽管它的名字,PrintWindow()可以用于抓取截图到位图,但不仅限于打印。

+0

谢谢,但问题仍然存在。我尝试了两种方法。 – Pateman