[gelöst] Screenshot eines Fensters
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
[gelöst] Screenshot eines Fensters
Hallo,
ich möchte automatisiert (z. B. mit einem Timer) Screenshots eines Fensters machen.
Mit Hilfe von
http://lazarus.firmos.at/index.php?topic=8967.0
funktioniert der Screenshot des Desktops ganz gut. Aber wie kann ich gezielt auf ein Fenster zugreifen?
Wer hat einen Tipp?
Vielen Dank.
Gruß, Linkat
ps: Das System auf dem das Programm laufen soll ist Windows NT!!.
ich möchte automatisiert (z. B. mit einem Timer) Screenshots eines Fensters machen.
Mit Hilfe von
http://lazarus.firmos.at/index.php?topic=8967.0
funktioniert der Screenshot des Desktops ganz gut. Aber wie kann ich gezielt auf ein Fenster zugreifen?
Wer hat einen Tipp?
Vielen Dank.
Gruß, Linkat
ps: Das System auf dem das Programm laufen soll ist Windows NT!!.
Zuletzt geändert von Linkat am Fr 21. Jan 2011, 19:07, insgesamt 1-mal geändert.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: [Frage offen] Screenshot eines Fensters
Da musst du wohl erst via FindWindow und GetDC das DeviceContext Handle des Fensters bestimmen.Linkat hat geschrieben: Wer hat einen Tipp?
Google ist dein Freund.
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: [Frage offen] Screenshot eines Fensters
Vielen Dank theo,
die Schlüsselwörter
Gruß, Linkat
die Schlüsselwörter
bringen schon mal reichlich Informationen. Aber scheinbar wird die unit Windows benötigt, die meines Wissens für das OS Windows ist. Da ich jetzt schon zu Hause bin, wo mir kein Windows zu Verfügung steht, muss ich mit meinen Tests bis morgen warten. Oder gibt es für die unit Windows eine vergleichbare unit für Linux?FindWindow und GetDC
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: [Frage offen] Screenshot eines Fensters
Nö, aber du schreibst ja ausdrücklich es sei für Windows (NT).
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: [gelöst] Screenshot eines Fensters
Hallo,
so nun habe ich ein bischen herumgespielt. Die Schlüsselwörter FindWindow und GetDC waren schon richtig. Danke theo, für den Tipp.
Der Zugriff auf die WinAPI ist aber nicht ohne. Es gibt ein paar Ungereimtheiten (z. B. Screenshot zeigt die Fenster, die unter oder über dem eigentlichen Fenster sind an, deshalb SW_HIDE und SH_SHOW, es lassen sich manche Fenster mit dem Programmnamen ansprechen , manche nicht; es lassen sich manche Fenster mit dem Fensternamen ansprechen , manche nicht). Aber auf meinem WinNT-Rechner (Steuer-PC einer Machine) läuft das Programm wie es soll.
Hier ist der Beispiel-Code, vielleicht kann jemand daraus lernen:
Je nachdem, ob das Fenster über Programmname oder Fenster-Überschrift gesucht werden soll, muss entweder 2a oder 2b auskommentiert sein.
Gruß, Linkat
so nun habe ich ein bischen herumgespielt. Die Schlüsselwörter FindWindow und GetDC waren schon richtig. Danke theo, für den Tipp.
Der Zugriff auf die WinAPI ist aber nicht ohne. Es gibt ein paar Ungereimtheiten (z. B. Screenshot zeigt die Fenster, die unter oder über dem eigentlichen Fenster sind an, deshalb SW_HIDE und SH_SHOW, es lassen sich manche Fenster mit dem Programmnamen ansprechen , manche nicht; es lassen sich manche Fenster mit dem Fensternamen ansprechen , manche nicht). Aber auf meinem WinNT-Rechner (Steuer-PC einer Machine) läuft das Programm wie es soll.
Hier ist der Beispiel-Code, vielleicht kann jemand daraus lernen:
Code: Alles auswählen
unit screendumpu;
{$mode objfpc}{$H+}
interface
uses
Windows,Classes,SysUtils,FileUtil,Forms,Controls,Graphics,Dialogs,ExtCtrls,Buttons,
StdCtrls,LCLIntf,LCLType;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1:TBitBtn;
btScreenDump:TButton;
Image1:TImage;
procedure btScreenDumpClick(Sender:TObject);
procedure FormCreate(Sender:TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender:TObject);
begin
caption:='Screen Dump-Test';
end;
procedure TForm1.btScreenDumpClick(Sender:TObject);
var ScreenDC :HDC;
wnd :HWnd;
ta,zeit :string;
jetzt :TDateTime;
AppName,FormCaption :PChar;
begin
AppName:='notepad'; // 1a
FormCaption:='Unbenannt - Editor'; // 1b
// wnd:=FindWindow(AppName,nil); // 2a
wnd:=FindWindow(nil,FormCaption); // 2b
ShowWindow(wnd,SW_HIDE); //
ShowWindow(wnd,SW_SHOW); //damit Fenster im Vordergrund
Caption:=IntToStr(wnd);
ScreenDC:= GetDC(wnd);
image1.picture.PNG.LoadFromDevice(ScreenDC);
ReleaseDc(wnd,ScreenDC);
jetzt:=now;
ta:=FormatDateTime('yymmdd',jetzt);
zeit:=FormatDateTime('hhmmss',jetzt);
Image1.Picture.SaveToFile(BilderPfad+'DispPattern-'+ta+'-'+zeit+'.png');
end;
end.
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: [Frage offen] Screenshot eines Fensters
Was muss man denn tun, dass man den Thread als gelöst kennzeichnen kann, was mann dann auch im ersten Beitrag sieht?
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
-
- Beiträge: 37
- Registriert: Sa 27. Mär 2010, 11:39
- OS, Lazarus, FPC: Windows 7 / Lazarus 1.0
- CPU-Target: 32/64 bit
Re: [Frage offen] Screenshot eines Fensters
einfach im ersten Beitrag auf den Ändern-Button klicken.Linkat hat geschrieben:Was muss man denn tun, dass man den Thread als gelöst kennzeichnen kann, was mann dann auch im ersten Beitrag sieht?
Grüße ... Kiffi
-
- Lazarusforum e. V.
- Beiträge: 561
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: [gelöst] Screenshot eines Fensters
Vielen Dank, Kiffi
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS