AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fenster einer fremden Anwendung auswählen und hWnd erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster einer fremden Anwendung auswählen und hWnd erhalten?

Ein Thema von resolution · begonnen am 28. Okt 2011 · letzter Beitrag vom 5. Nov 2011
Antwort Antwort
Benutzerbild von resolution
resolution

Registriert seit: 4. Jan 2005
Ort: Saarbrücken
52 Beiträge
 
Delphi 7 Enterprise
 
#1

Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 28. Okt 2011, 19:24
Hallo,

ich möchte eine kleine Anwendung schreiben die regelmäßig Screenshots von einer zuvor ausgewählten Anwendung macht.
Das Problem ist aber das Auswählen der Anwendung, was ich gern über die Maus tun möchte. Erträumt hab ich mir eine Art Drag'n'Drop, der Benutzer soll ein Bildchen von meiner Anwendung auf die Ziel-Anwendung ziehen. Hier scheitere ich aber, habe es versucht mit den Drag and Drop components von Anders Melander zu realisieren, aber ich stehe jetzt an einer Stelle wo ich nicht weiß wie ich an das Handle komme wo ich gedroppt habe

Ich könnte mir auch vorstellen, dass ich mit der Maus in die Zielanwendung klicke, es soll aber keine Prüfung werden, welches Fenster dann in den Vordergrund gerufen wird - sonst bekomme ich evtl das handle einer Anwendung die sich kurz vorher selbst in den vordergrund geschalten hat

Hat jemand Vorschläge / Stichwörter, wo ich mich schlau machen müsste?

Auch das 'Drag'n'Drop' des Bildes ist wohl nicht so ohne, Screen.Cursor funktioniert ja nur im Formular meiner Anwendung.. :/

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 28. Okt 2011, 19:25
Guck dir das mal an: http://www.michael-puff.de/Programmi...lphi/Programme -> WindowInfo.zip
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von gORDon_vdLg
gORDon_vdLg

Registriert seit: 7. Nov 2009
26 Beiträge
 
Delphi XE Architect
 
#3

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 1. Nov 2011, 20:01
Möglicherweise hilft dir diese Funktion weiter. Sie gibt dir ein Fenster Handle zurück das sich an der per Parameter angegeben Position befindet, hier kann man zum Beispiel die Mausposition angeben.

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 1. Nov 2011, 20:12
Ich mache das, indem ich die Maus auf den Fenstertitel halte. Nach 5 Sekunden bekomme ich dann das handle. Das habe ich irgendwo zusammenkopiert. Vielleicht hilft es.
Damit mache ich Screenshots von allem, was ich vorher mal mit der Maus gezeigt hatte.

Delphi-Quellcode:
var
   buffer: array [0..255] of Char;
   p: TPoint;

begin
  Caption:= '';
  GetCursorPos(p);
  GetClassName(WindowFromPoint(p), buffer, length(buffer));
  Caption:= 'Classname: '+ string(buffer);

  //wir können 2 verschiedene Fenster suchen lassen
  if RBWindowSearch1.Checked then begin
    EClassName1.Text:=string(buffer);
  end
  else begin
    EClassName2.Text:=string(buffer);
  end;

  GetWindowText(WindowFromPoint(p), buffer, length(buffer));
  Caption:= Caption+ ' WindowText: '+ string(buffer);
  beep;
  Timer1.Enabled:=False;
  caption:=fMain.HeadCaption; //Kopf wieder mit Ori beschreiben
  BtnStart2FindClass.Enabled:=True;
end;
Miniaturansicht angehängter Grafiken
programm.jpg  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras ( 1. Nov 2011 um 20:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von resolution
resolution

Registriert seit: 4. Jan 2005
Ort: Saarbrücken
52 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 4. Nov 2011, 23:11
Hallo

Luckie's Programm mit Source ist sehr nützlich und enthält auch alles was man benötigt - vielen Dank

Allerdings habe ich noch einige Probleme, das für mich zu nutzen - habe es noch nicht geschafft die Windows-Messages an mein Programm weiter zu leiten, das WindowInfo ist ja sehr Pascal'ig Vielleicht komme ich am WE weiter

Danke und viele Grüße,
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von gORDon_vdLg
gORDon_vdLg

Registriert seit: 7. Nov 2009
26 Beiträge
 
Delphi XE Architect
 
#6

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 4. Nov 2011, 23:34
Du kannst mittels GetWindowLong bzw. SetWindowLong die Window Proc ganz einfach Winapi-mäßig hooken oder detouren. Das würde ich mir mal ansehen. Gucks dir mal im MSDN an, interessant ist für dich dann das Flag GWL_WNDPROC. Detour wäre da sogar weniger empfehlenswert bzw. unnötig kompliziert weils da echt einfach per Winapi machbar ist.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 5. Nov 2011, 02:26
Warum sollte er für einen Screenshot die Windows Procedure hooken? Handle vom Fenster holen, dazu den DC ermitteln und das ganze in eine Bitmap mit BitBlt kopieren. Mit dem Bitmap kann man dann machen, was man will. Einzige Problem, man muss das Elternfenster erwischen, sonst hat man eventuell nur einen Screenshot von einem Steuerelement.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von gORDon_vdLg
gORDon_vdLg

Registriert seit: 7. Nov 2009
26 Beiträge
 
Delphi XE Architect
 
#8

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 5. Nov 2011, 14:46
Naja er schrieb doch das er irgendwelche Windowmessages abfangen will.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 5. Nov 2011, 14:50
Das heißt aber nicht, dass das für sein Vorhaben nötig ist. Oder ich habe ihn falsch verstanden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von gORDon_vdLg
gORDon_vdLg

Registriert seit: 7. Nov 2009
26 Beiträge
 
Delphi XE Architect
 
#10

AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?

  Alt 5. Nov 2011, 14:56
Das stimmt schon, für Screenshots ist das quatsch. Aber ich dacht ich schreib es mal wenn er schon fragt, wer weiß was er noch so vor hat?
  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 20: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