AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Per Mausklick Screenshot von Fenstern machen
Thema durchsuchen
Ansicht
Themen-Optionen

Per Mausklick Screenshot von Fenstern machen

Ein Thema von Stread · begonnen am 8. Jul 2011 · letzter Beitrag vom 11. Jul 2011
Antwort Antwort
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#1

Per Mausklick Screenshot von Fenstern machen

  Alt 8. Jul 2011, 23:10
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 9. Jul 2011, 01:24
MSDN-Library durchsuchenGetForegroundWindow() - Handle des Fensters im Vordergrund holen.
  Mit Zitat antworten Zitat
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#3

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 9. Jul 2011, 17:40
Und wie funktioniert das in Verbindung mit dem Mausklick auf das Fenster der anderen Anwendung?
Geht das überhaupt so wie ich es mir vorstelle?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 9. Jul 2011, 18:37
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 9. Jul 2011, 18:43
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 http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx relativ einfach
  Mit Zitat antworten Zitat
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#6

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 10. Jul 2011, 22:01
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;

Geändert von Stread (10. Jul 2011 um 22:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 10. Jul 2011, 23:21
Wie wäre es mit OnMouseUp? Da bekommst du die Koordinaten gleich frei Haus geliefert...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#8

AW: Per Mausklick Screenshot von Fenstern machen

  Alt 11. Jul 2011, 12:47
Ups 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.
http://s1.directupload.net/file/d/2582/nedfq7mz_jpg.htm
http://www.directupload.net/index.php?mode=upload
http://s7.directupload.net/file/d/2582/7ifnaj7p_jpg.htm
http://s1.directupload.net/file/d/2582/vub7avod_jpg.htm

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.
http://s1.directupload.net/file/d/2582/gzqw2wj4_jpg.htm
http://s7.directupload.net/file/d/2582/6cq9zduf_jpg.htm
http://s1.directupload.net/file/d/2582/ag22zssz_jpg.htm


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.

Geändert von Stread (11. Jul 2011 um 17:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
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