![]() |
Per Mausklick Screenshot von Fenstern machen
Hi,
ich habe ein Programm welches Screenshots vom Bildschirm macht und in jpegs speichert. Nun möchte ich aber gerne dass es (nach drücken eines Buttons) möglich ist wenn ich mit der Maus auf ein anderes Fenster klicke der Screenshot nur von diesem Fenster gemacht wird. Ich brauche von dem Fenster dann ja den handle, die ID oder sowas. Wie kann ich sowas per Mausklick auslesen? Kann ich diese Information dann gleich weiterverarbeiten um nur davon den Screenshot zu erstellen oder muss ich mir dann erst noch schauen auf welchen Pixeln das Fenster steht? Danke |
AW: Per Mausklick Screenshot von Fenstern machen
![]() |
AW: Per Mausklick Screenshot von Fenstern machen
Und wie funktioniert das in Verbindung mit dem Mausklick auf das Fenster der anderen Anwendung?
Geht das überhaupt so wie ich es mir vorstelle? |
AW: Per Mausklick Screenshot von Fenstern machen
Du könntest mit SetWindowsHookEx und WH_MOUSE_LL einen Hook setzen um die Maustastendrücke mitzubekommen.
Oder du kannst mit RegisterHotkey einen Tasten-Hotkey dafür definieren. |
AW: Per Mausklick Screenshot von Fenstern machen
Wenn du bei einem Button die Maustaste drückst, gedrückt hältst und sie dann auf dem anderen Fenster loslässt, bekommst du im Button das trotzdem mit und kannst anhand der Koordinaten das Fenster ermitteln.
Ganz ohne Hook :-) Das erstellen des Screenshots geht dann mit ![]() |
AW: Per Mausklick Screenshot von Fenstern machen
Das mit der Maustaste gedrückt lassen hört sich gut an.
Allerdings schaffe ich es nicht wenn ich den Button drücke und die Maus auf einem anderen Fenster wieder loslasse, den Screenshot davon zu bekommen. Aber den von anderen Fenstern nicht. Es wird anscheinend das Handle des Buttons genommen. Wenn ich den Code in einen Timer dann geht es. Das wäre dann aber ohne Maus ziehen. jfheins: Ist dein Link nicht nur zum Drucken gedacht?
Delphi-Quellcode:
function FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean;
var Rec: TRect; iWidth, iHeight: Integer; begin with Bmp do try GetWindowRect(h, Rec); iWidth := Rec.Right - Rec.Left; iHeight := Rec.Bottom - Rec.Top; Width := iWidth; Height := iHeight; BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY); Result := True; finally ReleaseDC(h, GetWindowDC(h)); end; end; //Liefert Bild von dem Button procedure TForm1.Button2Click(Sender: TObject); var h :HWND; begin h:=WindowFromPoint(Mouse.CursorPos); FormularScreenShot(Image1.Picture.Bitmap,h); Image1.Repaint; end; |
AW: Per Mausklick Screenshot von Fenstern machen
Wie wäre es mit OnMouseUp? Da bekommst du die Koordinaten gleich frei Haus geliefert...
|
AW: Per Mausklick Screenshot von Fenstern machen
Ups :oops: An MouseUp habe ich gar nicht gedacht.
Es funktioniert jetzt so lala. 1. Problem Fenster und die Taskleiste sind Schwarz wo die Aero Effekte sein sollten. ![]() ![]() ![]() ![]() 2. Problem Der Header des Fensters wird anscheinend nicht aktualisiert. Oben zeigt der VLC Player immer noch das gleiche Lied an während unten schon das neue läuft. Oder er zeigt es erst gar nicht an. ![]() ![]() ![]() Ich werde wohl eher die Koordianten des Fensters abfragen, dann einen Screenshot vom ganzen Bildschirm erstellen und am Ende das Bild irgendwie freistellen. Edit: Wie gesagt habe ich es jetzt über die Koordinaten gelöst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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