Hallo,
ich versuche jetzt schon etwas länger einen kompletten Screenshot in einer Konsolenanwendung zu erstellen. Die Funktion GetDC kennt Lazarus nicht, und ich müsste die komplette LCL einbinden (dann könnte ich aber gleich ne Windows Forms Anwendung machen). Ich hoffe es gibt da irgendeine Windows Funktion, oder Bibliothek
Danke für die Hilfe
Pseudo
Screenshot in Konsolenanwendung
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Screenshot in Konsolenanwendung
Pseudo hat geschrieben:ich versuche jetzt schon etwas länger einen kompletten Screenshot in einer Konsolenanwendung zu erstellen. Die Funktion GetDC kennt Lazarus nicht, und ich müsste die komplette LCL einbinden (dann könnte ich aber gleich ne Windows Forms Anwendung machen). Ich hoffe es gibt da irgendeine Windows Funktion, oder Bibliothek
In einer Konsolenanwendung kannst du keinen Screenshot machen. Ein Screenshot arbeitet mit einem Pixel-Gerät. Die Konsole ist aber ein Zeichen-Gerät (das heißt du hast Zeichen/Buchstaben und keine Pixel). Daher musst du irgendwie anders den Bildschirmpuffer auslesen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Screenshot in Konsolenanwendung
Vor einiger Zeit habe ich mit Delphi das realisiert (Algorithmus von VNC gestohlen):
-Michael
Code: Alles auswählen
DesktopBitmap: TBitmap;
...
wi8 := (wi+7) div 8;
Result := wi8*hi;
if Result > XDestsize then begin
Result := -1;
exit;
end;
DesktopBitmap := TBitmap.Create;
DesktopBitmap.Width := wi;
DesktopBitmap.Height := hi;
DesktopBitmap.PixelFormat := UsePixelFormat;
DesktopHandle := GetDesktopWindow;
DesktopHDC := GetDC(DesktopHandle);
BitBlt(DesktopBitmap.Canvas.Handle, x0dest, y0dest, wi, hi,
DesktopHDC, x0source, y0source, SrcCopy);
ReleaseDC(DesktopHandle, DesktopHDC);
GetDIBSizes(DesktopBitmap.Handle, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
Image := AllocMem(ImageSize);
if getdib(DesktopBitmap.Handle, 0, Info^, Image^) then begin
// Edit1.Text := 'OK';
end else begin
// Edit1.Text := 'Error';
FreeMem(Image, ImageSize);
FreeMem(Info, InfoSize);
Result := -1;
exit;
end;
DesktopBitmap.Free;
-Michael