![]() |
Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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 :) |
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
Guck dir das mal an:
![]() |
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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.
![]() |
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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 |
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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.
|
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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. ;)
|
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
Naja er schrieb doch das er irgendwelche Windowmessages abfangen will.
|
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
Das heißt aber nicht, dass das für sein Vorhaben nötig ist. Oder ich habe ihn falsch verstanden.
|
AW: Fenster einer fremden Anwendung auswählen und hWnd erhalten?
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?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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 by Thomas Breitkreuz