Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Desktop Screenshot (https://www.delphipraxis.net/43636-desktop-screenshot.html)

Knotti2015 6. Apr 2005 17:43


Desktop Screenshot
 
Hallo Leutz,

ich suche Tipps für das Programmieren eines Programmes welches Regelmäßig (1.Min)
einen Screenshot vom Desktop erstellt und automatisch als JPG Datei in einem Ordner abspeichert.

Wäre für eure Hilfe dankbar...

alcaeus 6. Apr 2005 17:44

Re: Desktop Screenshot
 
ScreenshotScreenshot bringt unter anderem das Thema hier: http://www.delphipraxis.net/internal...ect.php?t=2905

Greetz
alcaeus

Knotti2015 6. Apr 2005 17:49

Re: Desktop Screenshot
 
Danke für deine Antowrt wie baue ich den ein. Und wo wird die Zeit gesteuert in dem Code außerdem wird da die Datei doch als BMP und nicht als JPG gespeichert oder?

alcaeus 6. Apr 2005 17:51

Re: Desktop Screenshot
 
Zitat:

Zitat von Knotti2015
Danke für deine Antowrt wie baue ich den ein.

Z.B. in eine Funktion packen.

Zitat:

Zitat von Knotti2015
Und wo wird die Zeit gesteuert in dem Code

Delphi-Referenz durchsuchenTTimer

Zitat:

Zitat von Knotti2015
außerdem wird da die Datei doch als BMP und nicht als JPG gespeichert oder?

Delphi-Referenz durchsuchenTJPEGImage

Greetz
alcaeus

Knotti2015 6. Apr 2005 18:21

Re: Desktop Screenshot
 
http://www.delphipraxis.net/internal...ect.php?t=8024 geht das vielleicht auch damidt? wie kann ich es auslösen?

Knotti2015 6. Apr 2005 18:28

Re: Desktop Screenshot
 
mit diesem code

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var DCDesk: HDC; // hDC of Desktop
  bmp: TBitmap;
begin
  {Create a bitmap}
  bmp := TBitmap.Create;
   
  {Set a bitmap sizes}
  bmp.Height := Screen.Height;
  bmp.Width := Screen.Width;

  {Get a desktop DC handle - handle of a display device context}
  DCDesk := GetWindowDC(GetDesktopWindow);
 
  {Copy to any canvas, here canvas of an image}
  BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
         DCDesk, 0, 0, SRCCOPY);

  {Save the bitmap}
  bmp.SaveToFile('ScreenShot.bmp');

  {Release desktop DC handle}
  ReleaseDC(GetDesktopWindow, DCDesk);

  {Release a bitmap}
  bmp.Free;
end;
kann ich einen Desktop Screenshot machen aber wie konvertiere ich ihn nach jpeg

SirThornberry 6. Apr 2005 18:41

Re: Desktop Screenshot
 
konvertieren geht so
Delphi-Quellcode:
  VariableVomTypTJPEGImage.Assign(VariableVomTypBitmap);
und schon sollte dann dein JPEG den inhalt von dem Bitmap haben

Knotti2015 6. Apr 2005 18:51

Re: Desktop Screenshot
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var DCDesk: HDC; // hDC of Desktop
  bmp: TBitmap;
begin
  {Create a bitmap}
  bmp := TBitmap.Create;

  {Set a bitmap sizes}
  bmp.Height := Screen.Height;
  bmp.Width := Screen.Width;

  {Get a desktop DC handle - handle of a display device context}
  DCDesk := GetWindowDC(GetDesktopWindow);

  {Copy to any canvas, here canvas of an image}
  BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
         DCDesk, 0, 0, SRCCOPY);

  {Save the bitmap}
  bmp.SaveToFile('ScreenShot.bmp');

  {Release desktop DC handle}
  ReleaseDC(GetDesktopWindow, DCDesk);

  {Release a bitmap}
  bmp.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.Enabled := False;
end;

so sieht das jetzt aus kann ich irgentwie das konvertieren einbauen oder gleich es als jpg speichern lassen

Khabarakh 6. Apr 2005 19:19

Re: Desktop Screenshot
 
SirThornberry hat es doch schon beschrieben. Du musst im OnTimer-Event
Delphi-Quellcode:
bmp.SaveToFile('ScreenShot.bmp');
ersetzen.

Knotti2015 6. Apr 2005 19:44

Re: Desktop Screenshot
 
siehe unten:

Knotti2015 6. Apr 2005 20:14

Re: Desktop Screenshot
 
Entschuldigt für den komischen
posting.

Also ich bin jetzt soweit das eine bmp datei erstellt wird.
In diesem Link gibt es einen Code mitdem man BMP nach Jpeg konvertieren kann wie seht dieser Code eingebaut in einen timer2.* aus?

BMP-JPG

Matze 6. Apr 2005 20:55

Re: Desktop Screenshot
 
Sei mir nicht böse, aber schau dir mal ein Anfängertutorial an.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Bmp: TBitmap;
  Jpg: TJpegImage;
begin

  //Screenshot etc ...
  //dann hast du den in der Variblen "bmp"

  try
    Jpg.Assign(Bmp); //Dem Jpg das Bmp zuweisen
    Jpg.SaveToFile(ChangeFileExt(Filename, '.jpg' )); //Jpg speichern
  finally
    Jpg.Free; //Speicher jeweils freigeben
    Bmp.Free;
  end;
end;

Knotti2015 6. Apr 2005 21:26

Re: Desktop Screenshot
 
[Fehler] Unit1.pas(63): Undefinierter Bezeichner: 'Filename'

Wenn ich anstatt Filename -> 'test' reinschreibe bekomme ich

Achtung die Variable JPG ist nicht richtig intialisiert worden.

Nogge 7. Apr 2005 15:45

Re: Desktop Screenshot
 
Moin Knotti2015,
Du musst auch erst dein JPEGImage erstellen, wie du es auch oben in deinem Code mit der Bitmap gemacht hast:
Delphi-Quellcode:
  {Create a bitmap}
  bmp := TBitmap.Create;
Das heißt, du musst jetzt noch über deinem try
Delphi-Quellcode:
  {Create a JpegImage}
  Jpg := TJpegImage.Create;
hinzufügen.

Khabarakh 7. Apr 2005 16:08

Re: Desktop Screenshot
 
"FileName" soll eine String-Variable mit dem Pfad zum Speichern sein (bzw. TOpenDialog.FileName, da solltest du aber über den Filter erst gar keine andere Endung zulassen).
Zitat:

Sei mir nicht böse, aber schau dir mal ein Anfängertutorial an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz