Mit VB.NET ein Programm bedienen

Tortilla

Mitglied
Hi Leute!

Ich versuche mit VB.NET ein Programm zu bedienen.
Das bedeutet Buttons klicken, Text eintippen, Ergebnisse Auslesen usw...
Leider hab ich überhaupt keine Ahnung, wie ich ein anderes Programm mit .NET erkennen und steuern kann. Dazu müsste ich es wohl als Objekt im Quellcode erzeugen.

Wenn jemand weiß wie es geht, oder vielleicht einen Tip für mich hat, wäre mir damit schon sehr geholfen.

Thx Tortilla
 
Wenn dieses andere Programm dir "gehört" (-> du den Code hast und es verändern kannst) und in .NET geschrieben ist, kannst du Remoting verwenden.
Dabei erhält das "steuernde" Programm eine Referenz auf ein Objekt im "zu steuernden" Programm. Das wäre eine Möglichkeit.

Wenn eben dieses Programm kein .NET Programm ist, könntest du über COM+ auf eine Referenz zugreifen. Auch bekannt als Enterprise Services (glaub ich).

Ich selber habe bisher höchstens Remoting etwas angetastet (jedoch bisher ohne Erfolgserlebnis).

Die allerletze Variante wäre eine Netzwerkschnittstelle: Das zu steuernde Programm wartet als Server auf hereinkommende TCP Verbindungen.
Deine Fernsteuerung dient als Client und sendet dem Server Befehle.
 
Hey Sunray!

Leider gehört das Programm nicht mir, was die Sache mit dem Remoting schon mal ausschließt.
Für die zwei anderen Methoden interessiere ich mich jedoch sehr.
Gibt es denn eine Möglichkeit z.B. in Visual Studio.NET ein COM-Objekt selbst zu erzeugen, mit dem ich dann das fremde Programm bedienen kann? Ein Link zu einem Tutorial wäre echt dufte!

Die Sache mit der Netzwerkschnittstelle habe ich mir auch schon überlegt. Allerdings weiß ich nicht so recht wie ich dem Programm als Server die richtigen Befehle schicken kann. Ich will ja auch nicht beim Rumprobieren mit irgendwelchen ungültigen Befehlen den Programmserver zum Absturz bringen. :suspekt:

Am besten wäre es immernoch, wenn ich die Programmoberfläche aus .NET heraus ansteuern könnte.


greetz Tortilla
 
Wenn dir das programm nicht gehört wirds schwieriger.
Viele Programme werden aber mit COM-Komponenten ausgeliefert, die den Zugriff auf die Funktionen der Anwendung ermöglicht.

Beispiel: MS Office. Wenn du in VS.NET unter Referenz Einfügen auf COM klickst, findest du dort Klassen, mit denen sich Word, Excel usw. fernsteuern lassen.
Einschränkung: Dein Programm startet eine neue Instanz des Programms. Du kannst nicht bereits laufende Programminstanzen steuern. (Dazu müsste dir das Programm "gehören"...)

Das "zu fernsteuernde" Programm muss von sich aus eine Möglichkeit bieten, gesteuert zu werden. Ist das nicht der Fall, wirst du dein Vorhaben aufgeben müssen.
 
Eine COM-Komponente gibt es leider nicht.
Ob das Programm von sich aus eine Möglichkeit bietet, gesteuert zu werden, weiß ich nicht.
Es würde ja schon völlig ausreichen, wenn ich in ein Textfeld dieses Programms etwas eintragen und die Menüpunkte auswählen könnte (z.B. Bearbeiten -> Alles markieren). Vielleicht ginge es ja auch über Tastaturbefehle wie "Strg + A".
Ich habe es schon geschafft, ein laufendes Programm in .NET als Prozess zu erfassen.
Hier als Beispiel vom Editor:

Code:
Dim localByName As Process() = Process.GetProcessesByName("Notepad")
localByName(0).CloseMainWindow()
Damit kann ich immerhin schon einen laufenden Prozess schließen, also ein Programm beenden.
Bestimmt gibt es eine Möglichkeit, über den Spy++ den richtigen Prozess herauszulesen und diesen künstlich an das Programm zu schicken.
 
Ich weiss, dass man über die Windows API auf Controls zugreifen kann. Dazu benötigt man ein Handle des Controls. Dieses erhält man unter .NET durch: TextBox.Handle
Du könntest einer solchen API-Funktion auch das Handle einer "fremden" Textbox übergeben.
Ich kann dir aber nicht sagen, wie du daran kommst.

Leider kenn ich mit der WinAPI nicht besonders gut aus. Kann dir nicht einmal sagen, wie du den Inhalt manipulieren könntest..
 
Könntest du mir bitte mal ein Beispiel geben, wie man mit so einem Handle umgeht?
Das habe ich noch nicht so ganz begriffen.
 
Zurück