如何仅捕获Microsoft Edge浏览器窗口?

时间:2017-02-02 15:36:01

标签: delphi canvas microsoft-edge

我需要捕获 Microsoft Edge 窗口并尝试使用PrintWindow,但 unfortunately it doesn't work 。然后,现在我想尝试使用Canvas.CopyRect api。

我尝试使用以下代码但导致访问冲突错误在线显示在下面的屏幕截图中:

procedure ScreenShotWindow;
var
  c: TCanvas;
  r, t: TRect;
  h: THandle;
  Bild: TBitMap;
begin
  c := TCanvas.Create;
  h := FindWindow(nil, 'Microsoft Edge');
  c.Handle := GetWindowDC(h);
  GetWindowRect(h, t);
  try
    r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top);
    Bild.Width  := t.Right - t.Left; { <-- Access Violation Here }
    Bild.Height := t.Bottom - t.Top;
    Bild.Canvas.CopyRect(r, c, t);
    Bild.SaveToFile('test'+ RandomPassword(10)+'.bmp');
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;

我仍然不知道修复此代码后是否能够捕获 Microsoft Edg ,所以如果有人知道某种方式有效,请说出来:D。

1 个答案:

答案 0 :(得分:0)

您尚未在代码中创建Bild。这需要先创建才能使用它(并在完成后再销毁)。

procedure ScreenShotWindow;
var
  c: TCanvas;
  r, t: TRect;
  h: THandle;
  Bild: TBitMap;
begin
  c := TCanvas.Create;
  h := FindWindow(nil, 'Microsoft Edge');
  c.Handle := GetWindowDC(h);
  GetWindowRect(h, t);
  try
    r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top);
    Bild := TBitMap.Create;
    try
      Bild.Width  := t.Right - t.Left;
      Bild.Height := t.Bottom - t.Top;
      Bild.Canvas.CopyRect(r, c, t);
      Bild.SaveToFile('test'+ RandomPassword(10)+'.bmp');
    finally
      Bild.Free;
    end;
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;