![]() |
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 |
Re: Screenshot aus DLL heraus erstellen
|
Re: Screenshot aus DLL heraus erstellen
Bitmap.Canvas.Handle
Ich habe das irgendwie nicht in der DLL. Es muss irgendeine andere Lösung geben. |
Re: Screenshot aus DLL heraus erstellen
Woher kommt dieses Bitmap?
Wie holst du dir die Informationen über den Desktop? |
Re: Screenshot aus DLL heraus erstellen
Zeig doch einfach mal etwas Code, sonst raten wir uns hier dumm und dämlich.
|
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. :)
|
Re: Screenshot aus DLL heraus erstellen
Delphi-Quellcode:
Das ist also der Anfang, nur muss ich ja eine Destination Handle haben..
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; |
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; |
Re: Screenshot aus DLL heraus erstellen
Zitat:
|
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 10:27 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