如何在我自己的窗口下捕获屏幕,不包括我自己的窗口

时间:2011-06-27 15:57:48

标签: windows delphi

假设我想编制放大镜,我怎么能捕捉屏幕内容,不包括我自己的窗口? 我知道如何使用BitBlt和桌面DC使用我自己的窗口捕获屏幕。

为了更清楚:我想在窗口中显示放大的内容。

编辑:似乎除了在我可以捕获窗口下的屏幕内容之前以某种方式隐藏我的窗口(或客户端区域)之外没有其他解决方案。显然这会导致我的窗口闪烁,这使得这个场景变得毫无用处。

4 个答案:

答案 0 :(得分:2)

在捕获过程中,将表单AlphaBlend属性设置为true,将AlphaBlendValue设置为0.请注意,这将使您的表单完全不可见。

答案 1 :(得分:1)

您可以使用PrintWindow(),但速度并不快,并不适用于所有应用程序。

答案 2 :(得分:1)

您需要将屏幕截图从桌面DC捕获到内存中的位图。

procedure CaptureScreenShot(acapture: TBitMap);
 var c: TCanvas;
     r: TRect;
 begin
  c:= TCanvas.Create;
  c.Handle:= GetWindowDC (GetDesktopWindow);
  try
    r:= Rect(0,0,screen.width,screen.height);
    acapture.Width:=screen.Width;
    acapture.Height:=screen.Height;
    acapture.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.handle);
    c.Free;
  end;
end;

添加到这个Uwe的答案,让你的表单隐形,你有....

FCapturedScreenShot:TBitmap;
....
FCapturedScreenShot:=TBitmap.Create;
....
AlphaBlend:=true;
AlphaBlendValue:=0; 
CaptureScreenshot(FCapturedScreenShot);
AlphaBlendValue:=False; 

使用捕获的屏幕截图来获取您需要的任何内容,您可以通过另一种形式的位图分配它,或者将其保存在捕获的屏幕数组中......

答案 3 :(得分:0)

尝试在捕获屏幕之前最小化或隐藏表单,并在捕获屏幕后恢复或显示表单