Hallo,
ich möchte einen Screenshot von dem Clienten eines fremden Fensters machen, welches ich mit einem
Handle anspreche. (also einen Screen ohne titlebar und borders). Dazu habe ich mir das hier zusammen-geschrieben/kopiert:
Delphi-Quellcode:
function TForm1.FormularSaveScreenShot(FileName: String; h : hWnd): Boolean;
var
Rec: TRect;
iWidth, iHeight,left,top: Integer;
window: TWindowInfo;
begin
GetWindowInfo(h,window);
with TBitmap.Create do try
GetWindowRect(h, Rec);
iWidth := window.rcclient.right-window.rcClient.left;
iHeight := window.rcclient.bottom-window.rcClient.top;
left:=window.rcWindow.Left-window.rcclient.Left;
top:=window.rcwindow.Top-window.rcClient.top;
Width := iWidth;
Height := iHeight;
BitBlt(Canvas.Handle, left, top, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);
Result := True;
try SaveToFile(Filename) except Result := False end;
finally
ReleaseDC(h, GetWindowDC(h));
Free;
end;
end;
Das ausgebene Bitmap hat jetzt allerdings rechts einen weißen Rand (recht schmal, ungefähr die Borderdicke [evtl. nen bisschen mehr]) und außerdem habe ich den Eindruck, dass er eine ein oder zwei pixelbreite spalte des clienten rechts nicht abbildet. Wisst ihr wo der Fehler liegt?
mfg Kahpee