![]() |
Handle einer Anwendung heraus finden um diese fernzusteuern
Hallo,
zu diesem Thema gibt es bereits viele Threads, dennoch scheint das hier ein Spezielfall zu sein, den ich so noch nirgends gelesen habe. Mit WinSpy habe ich mir den Code generieren lassen um die Buttons zu drücken die ich drücken wollte....und es funktionierte. Der erste Schritt ist mit
Delphi-Quellcode:
das handle auszulesen und von dort an weiter in der Hierarchie bis zu den gewünschten Steuerelementen zu kommen.
wndMain := FindWindow('<Klassenname>','<Fenstertitel>');
Nachdem ich die Remote-Anwendung neu gestartet habe, ging es aber nicht mehr, denn bei jedem Neustart der Anwendung ändert sie ihren Klassennamen(!). Dieser ist sowas wie 'Afx:00400000:b:00010007:00000006:172A11EF'. Und wenn ich keinen Klassennamen angebe (also nil), dann bekomme ich ein anderes Handle zurück mit dem der Rest auch nicht mehr funktioniert. Wie schaffe ich es dennoch ohne den Klassennamen wissen zu können das richtige handle zu bekommen? danke |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Zitat:
![]() ![]() PS, Google sagt: ![]() ![]() |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Wenn die Anwendung ihren Fenstertitel nicht ändert, dann eventuell FindWindow ohne Klassenname, nur mit Fenstertitel
Oh, hab gerade in #1 gesehen, dass es dann nicht funktioniert. |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Vergiss es dynamisches wechseln des Klassen namens verhindert ein Auffinden des Fensters.
Habe ich früher mal mit UEDIT versucht das Programm macht genau das selbe. Zumindest macht es keinen sinn da etwas speichern zu wollen weil nicht fix. gruss |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Nur so ein Gedanke und leider etwas umständlich: mit EnumWindows alle Top-Level-Fenster durchgehen, mit GetWindowThreadProcessID die zugehörige ProzessID ermitteln, die man dann für CreateToolHelp32 verwenden kann, um die zugehörige Exe herauszufinden. Den Dateinamen muss man dazu natürlich wissen. Ob das so klappt, habe ich nicht versucht, aber einen Versuch ist es wert.
|
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Alternativ könntest du das Programm auch über dein eigenes Tool starten, eine DLL injecten und dann direkt die gewünschten Operationen ausführen. Die Handles bekommst du dann z.B. indem du
![]() ![]() |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Zitat:
Selbst wenn du die Anwendung selbst startest und somit die Kontrolle darüber hast wird es ohne Hook nichts nutzen. Aber.. habe es damit selbst schon versucht und sein lassen weil es die Anwendung ausreizt die hat mehr mit dem Hook zu tun als mit anderen Dingen. gruss |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Nach Ostern such ich Dir eine Funktion raus, die nach dem .exe Prozess sucht und Dir dessen Handles gibt.
Solange sich der .exe Name nicht auch jedesmal ändert, klappt es. Das Problem was Du dann lösen musst ist folgendes, finde heraus welches Handle das gesuchte ist, meine Funktion liefert nur alle mit dem Prozess verbundenen. Falls Dir sowas weiterhelfen kann such ich Montag mal. |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Zitat:
![]() Jedoch erhalte ich damit auch nicht das gesuchte Handle. Ich hatte dann vermutet dass mein gesuchtes Handle ein Child-Handle ist dass ich mit EnumChildWindows raus kriege, doch ein solch erstellter Callback wird nie aufgerufen... |
AW: Handle einer Anwendung heraus finden um diese fernzusteuern
Und wenn Du den Code dahingehend erweiterst, dass er nicht beim ersten gefundenen Fenster aufhört, sondern die ermittelten Fensterhandles in einer Liste ablegt? Es kann ja mehrere Fenster je Prozess geben, evtl. findest Du nur das falsche.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 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