Einzelnen Beitrag anzeigen

stalkingwolf

Registriert seit: 6. Mai 2011
543 Beiträge
 
#1

Screenshot von Fenster hat falschen Titel ( mit Beispielcode )

  Alt 12. Okt 2022, 17:12
Hallo,

wir haben unten stehend Funktion zum generieren eines Screenshots von einem aktiven beliebigem Programm.
Dazu haben wir in einem Hintergrundprogramm mit RegisterHotKey(fmain.Handle, ID3, MOD_ALT, vk_f10); uns die Screenshot Funktion auf eine Tastenkombi gelegt und können somit ein Bitmap vom aktiven Fenster durchführen und dann als Bild speichern, drucken oder in die Zwischenablage kopieren.

Folgendes passiert mit dem Titel z.b reproduzierbar mit Notepad, Word, Excel usw.

1.Notepad öffnen
2.Inhalt = Test
3.Datei speichern als test.txt. Damit steht in der Titelteile "test.txt - Editor"
4.Inhalt ändern auf Test2
5.Datei speichern als test2.txt. Damit steht in der Titelteile "test2.txt - Editor"
6.Nun den Screenshot erstellen und abspeichern oder per Zwischenablage in Paint einfügen

Nun steht in dem Screenshot in der Titelzeile "test.txt - Editor"
Unter der Titelzeile also im Textbereich wird aber das korrekte im Screenshot angezeigt.

Wird zwischen Punkt 5 und 6 der Editor minimiert und wieder angezeigt passiert folgendes
- Korrekter Titel ist im Screenshot
- Titelzeile fehlt komplett im Screenshot

Im Anhang der Quellcode und das Programm.
Frage wäre wo der Fehler ist oder es eine bessere Lösung zum erstellen des Screenshot gibt.

Code:
const ID3 = $FD;

procedure ScreenShot(activeWindow: bool; destBitmap : TBitmap) ;
 var
    w,h : integer;
    DC  : HDC;
    hWin : Cardinal;
    r  : TRect;
    ProcessID : THandle;
 begin

    if activeWindow then begin
      hWin := GetForegroundWindow;
      dc := GetWindowDC(hWin) ;
      GetWindowRect(hWin,r) ;
      w := r.Right - r.Left;
      h := r.Bottom - r.Top;
    end else begin
      hWin := GetDesktopWindow;
      dc := GetDC(hWin) ;
      w := GetDeviceCaps (DC, HORZRES) ;
      h := GetDeviceCaps (DC, VERTRES) ;
    end;

    try
     destBitmap.Width := w;
     destBitmap.Height := h;
     BitBlt(destBitmap.Canvas.Handle,
            0,
            0,
            destBitmap.Width,
            destBitmap.Height,
            DC,
            0,
            0,
            SRCCOPY) ;
    finally
     ReleaseDC(hWin, DC) ;
    end;
end;

procedure Tfmain.WMHotKey(Var Msg: TMessage);
var mybitmap: TBitmap;
    d      : TDVorschau;
    clipboard:Tclipboard;
begin
    case Msg. WParam of
        id3:begin
            mybitmap := TBitmap.Create;
            Screenshot(true,mybitmap);
            clipBoard := TClipBoard.Create;
            Clipboard.Assign(mybitmap);
            ClipBoard.free;
            mybitmap.free;
        end;
end;
Angehängte Dateien
Dateityp: zip sreenshottest.zip (4,31 MB, 7x aufgerufen)

Geändert von stalkingwolf (12. Okt 2022 um 17:22 Uhr)
  Mit Zitat antworten Zitat