Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Handle einer Anwendung heraus finden um diese fernzusteuern (https://www.delphipraxis.net/195838-handle-einer-anwendung-heraus-finden-um-diese-fernzusteuern.html)

Friday 30. Mär 2018 12:57

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:
wndMain := FindWindow('<Klassenname>','<Fenstertitel>');
das handle auszulesen und von dort an weiter in der Hierarchie bis zu den gewünschten Steuerelementen zu kommen.

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

himitsu 30. Mär 2018 13:02

AW: Handle einer Anwendung heraus finden um diese fernzusteuern
 
Zitat:

Zitat von Friday (Beitrag 1397665)
bekomme ich ein anderes Handle

MSDN-Library durchsuchenFindWindowEx oder MSDN-Library durchsuchenEnumWindows

PS, Google sagt:
https://msdn.microsoft.com/en-us/library/btbxa0ad.aspx
https://www.experts-exchange.com/que...omponents.html

Amateurprofi 30. Mär 2018 13:04

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.

EWeiss 30. Mär 2018 14:07

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

DeddyH 30. Mär 2018 17:17

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.

Zacherl 30. Mär 2018 18:58

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 MSDN-Library durchsuchenCreateWindow oder sowas wie MSDN-Library durchsuchenRegisterClass hookst.

EWeiss 30. Mär 2018 20:58

AW: Handle einer Anwendung heraus finden um diese fernzusteuern
 
Zitat:

Zitat von Zacherl (Beitrag 1397688)
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 MSDN-Library durchsuchenCreateWindow oder sowas wie MSDN-Library durchsuchenRegisterClass hookst.

Wie schon gesagt da du selber weist das sich das Handle immer ändert wird es ohne Hook wie hier vorgeschlagen nicht funktionieren.
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

KodeZwerg 30. Mär 2018 23:03

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.

Friday 31. Mär 2018 09:17

AW: Handle einer Anwendung heraus finden um diese fernzusteuern
 
Zitat:

Zitat von KodeZwerg (Beitrag 1397716)
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.

Danke, aber das macht die Funktion hier schon: https://www.delphi-treff.de/tipps-tr...mens-erhalten/

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...

DeddyH 31. Mär 2018 09:36

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 16:34 Uhr.
Seite 1 von 2  1 2      

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