Laden...

Control in anderem Prozess analysieren/modifizieren: Control aufgrund des .NET-Variablennamen finden

Erstellt von Quaneu vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.148 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren
Control in anderem Prozess analysieren/modifizieren: Control aufgrund des .NET-Variablennamen finden

Hallo zusammen,

ich schreibe gerade ein kleines Tool, mit dem ich z.B. eine TextBox in einem anderen Prozess analysieren und auch modifizieren will (Text ändern).

Beispiel:
Ich weiß, dass die TextBox den Namen "_shortNameTextBox" hat. Nun will ich über diesen Namen die TextBox in dem Prozess finden und dann z.B. "Hallo Welt" in diese schreiben.
Wie ich an das Fenster bzw. das Fensterhandle komme weiß ich schon und sehr wahrscheinlich auch wie ich den Text setzte (SendMessage(...)), doch leider finde ich keinen Weg die TextBox über ihren Namen zu finden. Über pInvoke geht dies leider nicht. Doch andere Tools können dies auch z.B. Ranorex.

Mich würde daher interessieren wie man dieses Problem lösen kann. Der Name der TextBox soll dabei nur ein Beispiel sein.

Hat jemand hierzu eine Idee?

Schöne Grüße
Quanue

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Quaneu,

Tools wie der .NET Reflector laden die ausführbare .NET-Datei (Assembly) in den eigenen Prozess und können dann per Reflection den Code und auch die Property/Field-Names ermitteln. Das löst allerdings nicht das Problem, wie man vom Namen (im eigenen Prozess) auf den Handle (im fremden Prozess) kommt. Ich habe keine Ahnung, ob es möglich ist, Reflection direkt in einem laufenden, fremden Prozess durchzuführen. Oder ob ein Ranorex hier irgendwelche Ticks anwendet, z.B. von dem im eigenen Prozess analysierten Code darauf schließt, wie der daraus erzeugte Control-Tree aussieht und diesen dann im fremden Prozess per PInvoke bis zum gesuchten Control durchläuft. Solange die Controls per Designer-Code erstellt wurden, dürfte eine solche Code-Analyse mit vertretbarem Aufwand zu realisieren sein.

herbivore

4.221 Beiträge seit 2005
vor 9 Jahren

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

F
10.010 Beiträge seit 2004
vor 9 Jahren

Dafür gibt es doch die Microsoft UI Automation Library.

Und das hier gelegentlich erwähnte White ( auch wenn die Mods immer nicht wissen was das ist ) benutzt diese für Automation oder z.b. Automatische UI Tests.
White ist von Teststack übernommen und jetzt auf https://github.com/TestStack/White zu bekommen.

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Vielen Dank für eure Hilfe.

@FZelle:
Werd ich mir jetzt dann gleich anschauen.

@Programmierhans:
Das Problem liegt darin, die Textbox zu finden. Den Text setzten sollte dann kein Problem mehr sein.

@herbivore:
Mein Ziel ist es einen laufenden Prozess zu analysieren/modifizieren. Mit Reflection wüsste ich gar nicht wo ich anfangen soll. Brauch ja einen Type...
Snoop kann ja auch einen laufende WPF Anwendung und ich glaub sogar Forms Anwendung analysieren. Daher sollte es einen Weg geben 😃

Finde das Thema so interessant, daher würd ich sowas mal gern selbst machen.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Quaneu,

Mein Ziel ist es einen [anderen] laufenden Prozess zu analysieren/modifizieren.

weiß ich und auf genau den Fall bin ich eingegangen und habe mögliche Lösungsansätze beschrieben. Da diese zugegeben relativ unkonkret sind, solltest du es aber erstmal mit den Vorschlägen der anderen versuchen.

herbivore

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Ich habe gestern noch einen interessanten Artikel gefunden. Doch leider übersteigt der Code meine zwei Wochen alten C++ Kenntnisse bei weitem...

Deliver The Power Of Spy++ To Windows Forms With Our New Tool

Soweit ich gesehen habe scheint er aber auch Reflection einzusetzen, doch leider ist dies auch nur eine Vermutung.

Jetzt werde ich mir aber UI Automation Library genauer anschauen, da diese sehr vielversprechend aussieht.

T
708 Beiträge seit 2008
vor 9 Jahren

Hallo Quaneu,

kurze Info: Unter Windows 7, 8 & 8.1 funktioniert Spy++ nicht mehr.