我需要捕获 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。
答案 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;