Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Screenshot aus DLL heraus erstellen (https://www.delphipraxis.net/94043-screenshot-aus-dll-heraus-erstellen.html)

sk0r 15. Jun 2007 00:13


Screenshot aus DLL heraus erstellen
 
Tag.

Ich würde gerne einen Screenshot vom Desktop aus einer
DLL heraus erstellen. Leider funktionieren alle
Codes, welche ich getestet habe nur auf Forms.

Gibt es eine Möglichkeit aus einer DLL heraus einen
Screenshot machen?

Danke schon mal für hilfe!

MfG

Sunlight7 15. Jun 2007 03:12

Re: Screenshot aus DLL heraus erstellen
 
Moin!

Hast Du sowas schon probiert?

sk0r 15. Jun 2007 14:26

Re: Screenshot aus DLL heraus erstellen
 
Bitmap.Canvas.Handle

Ich habe das irgendwie nicht in der DLL. Es muss irgendeine andere Lösung geben.

ste_ett 15. Jun 2007 14:34

Re: Screenshot aus DLL heraus erstellen
 
Woher kommt dieses Bitmap?
Wie holst du dir die Informationen über den Desktop?

Luckie 15. Jun 2007 14:35

Re: Screenshot aus DLL heraus erstellen
 
Zeig doch einfach mal etwas Code, sonst raten wir uns hier dumm und dämlich.

ste_ett 15. Jun 2007 14:40

Re: Screenshot aus DLL heraus erstellen
 
Prinzipiell ist es überhaupt kein Problem einen screenshot aus einer DLL heraus zu erstellen, es ist maximal etwas aufwendiger als bei einem Formular mit fertig erstellten Komponenten. :)

sk0r 15. Jun 2007 15:01

Re: Screenshot aus DLL heraus erstellen
 
Delphi-Quellcode:
procedure CreateScreenshot(hScreenFile: String);
var
  hScreenDC: hDC;
begin
  hScreenDC := CreateDC('DISPLAY', 0, 0, nil);
  if hScreenDC <> 0 then
  begin
    BitBlt(<Destination?>, 0, 0, czEngFuncs.GetWindowCenterX*2, czEngFuncs.GetWindowCenterY*2, hScreenDC, 0, 0);
  end;
  DeleteDC(hScreenDC);
end;
Das ist also der Anfang, nur muss ich ja eine Destination Handle haben..

ste_ett 15. Jun 2007 15:07

Re: Screenshot aus DLL heraus erstellen
 
Destination ist davon abhänig, was du mit dem Bild machen willst.
Wenn du es speichern willst, kannst du es in eine TBitmap-Instanz kopieren und dann speichern. :)

Delphi-Quellcode:

uses
  SysUtils, Classes, Windows, Graphics;


...


function TakeScreenshot(FileName: PChar): Integer; stdcall;
var
  Res: Integer;
  DesktopDC: HDC;
  DesktopImage: TBitmap;
  DesktopCanvas: TCanvas;
begin
  Res := -1;

  DesktopDC := GetDC(0);
  if (DesktopDC <> 0) then
  begin
    try
      DesktopCanvas := TCanvas.Create;
      try
        DesktopImage := TBitmap.Create;
        try
          DesktopCanvas.Handle := DesktopDC;

          DesktopImage.Width :=
            DesktopCanvas.ClipRect.Right - DesktopCanvas.ClipRect.Left;
          DesktopImage.Height :=
            DesktopCanvas.ClipRect.Bottom - DesktopCanvas.ClipRect.Top;

          if (BitBlt(
                DesktopImage.Canvas.Handle, 0, 0, DesktopImage.Width, DesktopImage.Height,
                DesktopCanvas.Handle, 0, 0,
                SRCCOPY
            )
          ) then
          begin
            DesktopImage.SaveToFile(FileName);

            Res := 0;
          end;
        finally
          DesktopImage.Free;
        end;
      finally
        DesktopCanvas.Free;
      end;
    finally
      ReleaseDC(0, DesktopDC);
    end;
  end
  else
    Res := -2;

  Result := Res;
end;

exports
  TakeScreenshot;

SirThornberry 15. Jun 2007 15:10

Re: Screenshot aus DLL heraus erstellen
 
Zitat:

Zitat von sk0r
Bitmap.Canvas.Handle

Ich habe das irgendwie nicht in der DLL. Es muss irgendeine andere Lösung geben.

mir scheint es als ober er meint das es nicht geht weil TBitmap etc. nicht verfügbar ist, er also einfach in den uses die entsprechenden units noch nicht gesetzt hat.

sk0r 15. Jun 2007 15:31

Re: Screenshot aus DLL heraus erstellen
 
ja ich bin ein dummer idiot. hab vergessen graphics zu includen. nun gehts >.<


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 1 von 2  1 2      

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