Einzelnen Beitrag anzeigen

Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

Screenshot von dem Clienten eines fremden Fensters machen

  Alt 29. Jan 2010, 14:06
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
  Mit Zitat antworten Zitat