Andere Anwendung steuern

Ist es möglich per VBasic „Einfügeoperationen“ in anderen Anwendungen durchzuführen, d.h. z.B. ein Button geclickt wird, oder ein bestimmter Text in ein Edit geschrieben wird.

(ich kann die andere Anwendungen allerdings vom Code her nicht beeinflussen!)

Grüße
Fabian

Hallo Fabian,
in gewissen Grenzen kann ‚Sendkeys‘ helfen. Meist hast Du aber keine Kontrolle über den Erfolg der Eingabe, womit das recht unsicher wird. Speziell im Disfenster kannst Du aber den Befehl so absetzen, daß auf die Ausführung gewartet wird.
Gruß, Rainer

Hallo
Ich habe festgestellt, das es ein typischer Fehler ist, zu glauben, man brauche den „Windows Code“ oder man müsse irgendwie ein Programm ändern, um dieses oder jenes „funny“ hinzukriegen.

Es gibt da verschiedene Methoden

  1. Über exportierte Funktionen: Der Internetexplorer und manche andere lassen sich instanzieren bzw. starten und seine Methoden, das sind Unterprogramme und zugehörige Variablen, vom VB aufrufen oder steuern.

  2. Jedes Window hat eine Messageloop; die Messages gehen alle über Windows, d.h. jedes Programm ist an seinen Controls praktisch offen.
    Man muß nur die „Handles“ bekommen, das sind Identifizierungsnummern, und schon kann man fleißig Nachrichten senden.
    Man kann auch mit einem speziellem Programm diese Nachrichten kontrollieren.

Wenn Du Dir also anschaust, was „Nachrichten unter Windows“ bedeutet, wird es relativ einffach, die Materie zu verstehen.
„Nachrichten“ wird allerdings oft mit Mail und Messageprogrammen verbunden, was hier aber nicht gemeint ist.

MfG

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Matthias,
das ist eine sehr interessante Materie, von der ich bisher leider nichts verstehe. Hast Du eventuell ein beliebiges, deutsch kommentiertes Beispiel als Hilfe zum Einstieg?
Gruß, Rainer

Hallo Matthias,
das ist eine sehr interessante Materie, von der ich bisher
leider nichts verstehe. Hast Du eventuell ein beliebiges,
deutsch kommentiertes Beispiel als Hilfe zum Einstieg?
Gruß, Rainer

Hallo
Es kommt darauf an, was Du eigentlich machen willst.
Im ganzen ist die Materie nicht so ganz einfach.
Das MSDN
(Produkt von Microsoft, liegt auch der VB-Professional CD bei)
kann ich als einzige zuverlässige und umfangreiche Quelle für solche Informationen nennen.
Selbst dann muß man lange suchen und experimentieren, wobei nur mäßige Englischkenntnisse es ganz schön ermüdend macht.
Möchte man nur den IE instanzieren, bzw. ins VB einfügen, findet man schon was in der Online Hilfe vom VB.
Möchte man im ganzen System rumspuken, wird es schwieriger.
Da gibts ja diverse VB Seiten im Internet, brauchst nur zu suchen.
MfG
Matthias

Hallo
Ich habe festgestellt, das es ein typischer Fehler ist, zu
glauben, man brauche den „Windows Code“ oder man müsse
irgendwie ein Programm ändern, um dieses oder jenes „funny“
hinzukriegen.

Nein, glaub ich nicht, es soll im Übrigen auch kein „funny“ werden…

Es gibt da verschiedene Methoden

  1. Über exportierte Funktionen: Der Internetexplorer und
    manche andere lassen sich instanzieren bzw. starten und seine
    Methoden, das sind Unterprogramme und zugehörige Variablen,
    vom VB aufrufen oder steuern.

Weiß ich, kann ich in meinem Fall aber nicht verwenden.

  1. Jedes Window hat eine Messageloop; die Messages gehen alle
    über Windows, d.h. jedes Programm ist an seinen Controls
    praktisch offen.
    Man muß nur die „Handles“ bekommen, das sind
    Identifizierungsnummern, und schon kann man fleißig
    Nachrichten senden.
    Man kann auch mit einem speziellem Programm diese Nachrichten
    kontrollieren.

Weiß ich auch.

Wenn Du Dir also anschaust, was „Nachrichten unter Windows“
bedeutet, wird es relativ einffach, die Materie zu verstehen.
„Nachrichten“ wird allerdings oft mit Mail und
Messageprogrammen verbunden, was hier aber nicht gemeint ist.

Ich kenn mich da einigermaßen aus, kann das mit c und delphi usw. weiß nur nicht wies mit visual basic geht, weil ich damit noch nie programmiert hab.
Außerdem ist mir nicht klar: Bleibt das Handle jedes Mal gleich?
Normalerweise nicht oder?
Was gibt es also damit ich ein Editfeld in einem anderen Fenster eindeutig identifizieren kann? Bzw. wie bekomm ich das Handle des anderen Programmes? Geht das irgendwie über eine Mutex?

Grüße
Fabian

Also wenn Du Dich da schon einigermaßen auskennst, dann glaube ich reichen erstmal diese Hinweise:

  • Das Schicken von Nachrichten passiert meistens über die Win32 API Funktionen SendMessage() oder PostMessage(). Die sind auch z.B. im MSDN beschrieben (http://msdn.microsoft.com/library/default.asp?url=/l…), genauso wie die Nachrichten, die Standardcontrols verstehen und die nötigen Parameter.
  • Um diese Funktionen in VB zu benutzen muss man VB erst mal klarmachen, dass es sie gibt und wo sie liegen. Das geht (IIRC) per „declare function irgendwas(parameter as typ) as typ“ mit der Angabe, in welcher DLL die Funktion zu finden ist.
    SendMessage und PostMessage stecken in User32.dll.

Danach kannst Du auch aus VB heraus mehr oder weniger einfach Nachrichten an Fenster schicken.

Dazu brauchst Du aber, wie schon sehr richtig erwähnt wurde, den Window Handle des Zielfensters. Dieser ist jedoch bei jeder Instanziierung eines Fensters anders (und kann sich sogar im laufenden Betrieb ändern, bspw. wenn das Aussehen eines Fensters zur Laufzeit geändert wird).
Um das entsprechende Fenster zu finden kann man z.B. FindWindow und verwandte Funktionen verwenden (muss man ebenfalls per declare function bekannt machen, sind auch z.B. im MSDN beschrieben: http://msdn.microsoft.com/library/default.asp?url=/l…).

Sag’ Bescheid, ob das schon gereicht hat oder ob ich ausführlicher werden soll.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Sag’ Bescheid, ob das schon gereicht hat oder ob ich
ausführlicher werden soll.

Hm, danke hat es für den Anfang mal. Weiß wie ich weiterkomm, danke.

Grüße
Fabian