Auf externe Windows-Forms-Fenster zugreifen
-
Hallo Leute,
ich bin in der Materie von .NET ziemlich unbewandert, allerdings habe ich gerade ein Problem, bei dem ich sehr viel Zeit sparen könnte, wenn ich an die Daten einer .NET-Anwendung herankäme. Derzeit muss ich Zahlen aus einer Tabelle dieser Anwendung wahlweise per Hand abschreiben oder aber über einen anderen Dialog in Excel importieren, was mir allerdings die View-Einstellungen kaputt macht und praktisch genausoviel Zeit kostet.
Gibt es eine Möglichkeit, auf die Objekte einer laufenden .NET-Anwendung zuzugreifen? Ich konnte per Verweis auf die Assemblies dieser Anwendung zugreifen, allerdings sind diese recht umfangreich und ich kam über Spy++ auch nicht an den exakten Klassennamen des Fensters heran, welches die Daten in tabellarischer Weise darstellt. Das wäre wie die Suche nach der Nadel im Heuhaufen.
Zudem weiß ich nicht wie ich auf eine laufende Instanz dieser Software zugreifen könnte.Da ich damit an die hundert Stunden Arbeitszeit sparen könnte, wollte ich mal fragen, ob ihr eine Idee habt, wie das gehen könnte und wo ich über nötige Arbeitsschritte nachlesen könnte.
Viele Grüße,
Michael
-
Du kannst Dir das Handle der Form holen.
Dann kannst Du die das Handle des Controls holen und darauf zugreifen.Es gibt sogar bei Visual Studio eine kleine Anwendung um dir das anzuzeigen.
Nennt sich Spy+
-
Hallo Tom!
Spy+ habe ich jetzt nicht gefunden, aber auf MSDN ManagedSpy, welches allerdings nicht mehr so recht wollte.
Anschließend habe ich ObjectSpy auf codeproject gefunden, das in seiner kompilierten Form erstmal mit Exceptions ausstieg. Als ich das Projekt dann selber für die x64-Plattform erstellt hab, gab es keine Exceptions mehr, allerdings wird der injizierte Code scheinbar auch nicht ausgeführt. Es wird dort managed-C++ code aus einer dll injiziert, welcher wiederum eine Form in einer c#-dll nachlädt/ausführen soll. Jetzt habe ich das Probleme, dass die Breakpoints im injizierten Code während des Debuggens deaktiviert sind, weil hierfür keine Symbole geladen sein sollen ("Für dieses Dokument wurden keine Symbole geladen"). Kann ich das irgendwie manuell tun? Mich würde interessieren, ob der Hook überhaupt aufgerufen wird oder warum das Objekt-Fenster am Ende nicht dargestellt wird.Viele Grüße,
Michael
-
Okay Leute, es funktioniert soweit!
Aber jetzt habe ich ein neues Problem. In den C#-Projekten benutze ich Verweise auf eigene dll's und solche von der Software, von der ich redete. Das funktioniert wunderbar im Zielverzeichnes beim Kompilieren des Projekts, wenn ich die dll's und mein Programm nun aber woanders hinkopiere, dann bekomme ich Fehlermeldungen, weil die Assemblies sich sozusagen im Pfad unterscheiden. Vielleicht kennt ihr solche Probleme ja schon. Gibt es dazu eine einfache Lösung? Ich müsste das ganze ja auf meinem Arbeitsrechner ausführen, der zudem die Zielsoftware und deren dll's an einer ganz anderen Stelle installiert hat.Viele Grüße,
Michael