Der Windows-Roboter und seine Steuerung
Technische Angaben
Der Windows-Roboter ist ein in Visual Basic 5(SP3) geschriebenes 32-Bit
Programm für Windows95/98/ME/NT4/2K/XP. Das Programm benötigt die
Microsoft Visual Basic 5.0 Runtime-Bibliothek "MSVBVM50.DLL" sowie die
DLLs "dsremote.dll", "dshandle.dll", "dshwndex.dll", "dsrgstry.dll", "dssecure",
"dsmissng.dll", "dsmnhook.dll", "dsnetwrk.dll", "dsfiles.dll" und u.U. die
"dsevtmsg.dll" sowie "zlib32.dll" zum Arbeiten. Wenn mit dem Programm die
standardmäßigen 32-Bit-Steuerelemente von Windows (Common Controls)
angesprochen werden sollen, wird außerdem die "dscomctl.dll" benötigt. Bei allen
genannten DLLs genügt es, wenn diese im Programmverzeichnis vorhanden sind;
eine Registrierung ist nicht notwendig (bzw. nicht möglich). Bei einem Setup
werden die erforderlichen Dateien - soweit nicht vorhanden - automatisch
angelegt.
Allgemeines
Der Windows-Roboter dient dazu, Fremdanwendungen mittels Mausaktivitäten
und/oder simulierten Tastatureingaben sowie direkt per Code (API-Funktionen)
zu steuern. Dazu ist es notwendig, ihm Informationen darüber zu vermitteln, 1. welches Steuerelement/Bedienelement der Fremdanwendung aktuell
angesprochen werden soll und 2. welche Operationen zum Ansprechen dieses Elements durchzuführen sind. Die Informationsübermittlung an den Roboter geschieht auf der Grundlage von
Text- (ASCII) Dateien, die vom ihm gelesen und zeilenweise interpretiert
werden. Diese Dateien (sie müssen im gleichen Verzeichnis wie das Remote-
Programm oder in dessen Unterverzeichnis "\RemFiles" abgelegt werden) können
mit jedem Texteditor erstellt oder bearbeitet werden. Für die Namensgebung
dürfen nur Buchstaben, Ziffern und "_"
verwendet werden. Die einzelnen Zeilen
werden im folgenden als "RCL-Ausdrücke" ("RCL" steht für "Remote Control
Language") bezeichnet, und diese Art von Dateien wird "Remote-Datei" benannt. RCL-Ausdrücke besitzen immer einen Befehls- und ggf. einen Datenteil, die
durch ein Backslash voneinander getrennt sind. Der gesamte RCL-Ausdruck hat
den Datentyp "Zeichenkette". Die Befehle bestehen aus drei Buchstaben mit nachfolgendem Backslash und
stehen am Anfang eines RCL-Ausdrucks. Sie beinhalten die globalen
Anweisungen an den Roboter. Der Datenteil ist in jeder Hinsicht flexibel und kann
Informationen zu Dateien,
zu Steuerelementen oder numerische Werte in Form von Ziffern beinhalten.
Einige Befehle benötigen keinen Datenteil. Die grundsätzliche Vorgehensweise beim Erstellen einer Remote-Datei ist
dadurch gekennzeichnet, daß zuerst eine oder mehrere Anweisung(en) gegeben
werden, um das Zielobjekt (Steuerelement, z.B. Button oder Kontrollkästchen)
zu lokalisieren, d.h. auf dem Bildschirm zu suchen und nach erfolgreicher Suche
seine Daten, u.a. die Koordinaten zu ermitteln, daß anschließend evtl.
notwendige Zusatzinformationen zur Lokalisierung eingetragen werden (z.B. bei
einer Listbox der Text oder die Indexnummer des anzuklickenden Eintrags) und
schließlich die auszuführende Operation festgelegt wird (Mausklick, MouseEvent,
Doppelklick, rechte Maustaste, Texteingabe etc.). Die Lokalisierung erfolgt normalerweise stufenweise ausgehend vom Desktop bis
hin zum Zielobjekt. Als Angaben müssen jeweils die Klasse und die
Beschriftung/der Text des jeweiligen Fensters bzw. eindeutige Teile davon
eingetragen werden, und zwar wieder durch Backslash getrennt. Hat das
Zielobjekt keine Beschriftung, so ist statt dessen "notext" oder ein Stern ("*")
einzutragen; im letzteren Falle werden alle Beschriftungen akzeptiert. Die
korrekten Angaben können aus einem Textfenster des Remote-Programms
entnommen bzw. direkt in den Remote-Editor kopiert werden, wenn das
Programm im Developmodus mit sichtbarer Oberfläche betrieben wird. Der Windows-Analyzer bietet ähnliche Möglichkeiten (siehe "Benutzung des
Windows-Analyzers"). Bei der Lokalisierung und bei der Befehlssyntax werden zwei Bereiche
unterschieden. Der erste Bereich betrifft die unmittelbar auf dem Desktop
sichtbaren (Haupt)Fenster, die als TopWindows bezeichnet werden sollen. Bei
diesen Fenstern reicht es aus, wenn als Fensterklasse eine Zeichenfolge angegeben
wird, die in der tatsächlichen Fensterklasse enthalten ist. Der zweite Bereich
umfaßt alle anderen (Kind)Fenster und deren Kindfenster in beliebiger
Hierarchietiefe. Im Analysemodus ermöglicht das Programm die Analyse und
Anzeige beliebiger (sichtbarer) Fenster in beliebiger Tiefe. Der Windows-
Analyzer bietet ähnliche Möglichkeiten (siehe "Benutzung des Windows-
Analyzers"). In der Regel kann ein Zielobjekt über zwei Ebenen lokalisiert werden - zunächst
anhand des übergeordneten TopWindows und dann über die Präzisierung der
eigenen Klasse und Beschriftung, so daß ein typischer RCL-Befehlssatz aus drei
Zeilen besteht und etwa wie folgt aussehen könnte:
STW\shell_traywnd\notext '# TopWindow (SearchTopWindow) SWC\button\notext '# Steuerelement (SearchWindowsChild) MLC\ '# Mausklick links (MouseLecftClick) @
Diese Befehlsfolge würde bewirken, daß ein linker Mausklick auf den Startbutton
(Taste mit dem Windows-Logo und der Aufschrift 'Start' ganz links in der
Taskleiste) ausgeübt wird (der Button trägt zwar eine Beschriftung, jedoch nicht
als Text, sondern als Bild, und deshalb muß "notext" oder "*" angegeben werden.
Das Analyseprogramm zeigt diese Eigenschaften korrekt an).
Zusätzlich zur Lokalisierung wurde noch eine große Anzahl von Befehlen
implementiert, die sich für die Steuerung einer Fremdanwendung oder auch
außerhalb derer als notwendig oder nützlich erwiesen haben. Das betrifft
insbesondere den Umgang mit Dateien und Verzeichnissen (Ausführen,
Kopieren, Löschen, Umbenennen, Synchronisieren etc.), aber auch die
Manipulation von Windows-Komponenten, das Arbeiten mit der Registrierung
u.v.a.m. Außerdem besteht die Möglichkeit, mit Variablen zu arbeiten und die
Abarbeitung bestimmter Abschnitte von dem Ergebnis diverser
Prüfungen/Abfragen abhängig zu machen. Dadurch läßt sich das Programm sehr
flexibel einsetzen.
Die Erzeugung einer Remote-Datei zur Steuerung einer Fremdanwendung erfolgt
durch zeilenweises Aneinanderreihen von RCL-Ausdrücken. Eine einzelne
Remote-Datei, die eine abgeschlossene, eigenständige Aufgabe erfüllt, muß mit
dem einzelnen Zeichen "@" in der letzten Zeile beendet werden.
Leerzeilen können zur besseren Lesbarkeit eingefügt werden. Diese Zeilen sowie
solche, die mit einem Hochkomma (') beginnen, werden bei der
Programmabarbeitung übersprungen. Alles, was in einer Zeile nach einem Hochkomma steht, wird ignoriert; Ausnahmen bilden die Befehle "STT\"
und "MBX\". Wenn Sie in einer Remote-
Datei das Hochkomma als Textzeichen benötigen, müssen Sie die Zeichenfolge
"$sq$" für das Hochkomma verswenden oder den Text, der das Zeichen enthält,
mittels "STT\" und "VAR\"
einer Variablen zuweisen und diese Variable statt des
Textes benutzen.
Remote-Dateien werden i.allg. "abgespielt",
indem sie an das Remote-Programm
als Befehlszeilenparameter übergeben werden. Erfolgt die Übergabe ohne
Pfadangabe, wird die Remote-Datei im Verzeichnis der "Remote.exe" oder dessen
Unterverzeichnis "\RemFiles" gesucht. Wenn Sie eine Remote-Datei aus einem anderen Verzeichnis ablaufen lassen
wollen, müssen Sie den vollen Pfadnamen übergeben. Dann wird gleichzeitig der
Suchpfad für evtl. von der Remote-Datei verwendete Text-, Wave- und
Bilddateien, die normalerweise ebenfalls in entsprechenden Unterverzeichnissen
des Remote-Programms gesucht werden ("\Text", "\Wave", "\Picture"), so geändert,
daß diese Dateien nun in Verzeichnissen mit den o.g. Namen als
Parallelverzeichnisse zu demjenigen gesucht werden, in welchem die Remote-
Datei gespeichert ist.
Ablaufbegrenzung
Wenn die Remote-Datei eine Zeile mit "@"
(Klammeraffe) am Anfang enthält,
wird das Remote-Programm an dieser Stelle beendet. Gleichzeitig wird der
Eintragzähler, der den Abarbeitungsstand der Remote-Datei registriert und bei Reboot-Befehlen in der Registrierung speichert, wieder auf Null gestellt.
Normalerweise wird dieses Zeichen nur am Schluß der Datei eingetragen, um die
vollständige Abarbeitung zu signalisieren (die Datei muß mit einem
Klammeraffen abgeschlossen werden, sofern keine Übergabe an eine andere Datei
erfolgt - siehe unter Verkettung), es kann aber auch innerhalb von
Entscheidungsblöcken benutzt werden, um beispielsweise das Programm zu
beenden, wenn ein gesuchtes Fenster nicht existiert.
Wenn die Datei eine Zeile mit "#"
(Doppelkreuz) am Anfang enthält, wird das
Remote-Programm angewiesen, nach dem nächsten Befehl (es muß sich dabei um
einen Mausklick handeln!) abzubrechen, ohne den Zählerstand zurückzusetzen.
Diese Vorgehensweise ist beispielsweise notwendig bzw. zweckmäßig, wenn der
nachfolgende Befehl (Mausklick) dazu dient, das Herunterfahren und
Neubooten zu bestätigen. Nach dem Neustart kann dann das Programm weiter
abgearbeitet werden. Grundsätzlich wird jedoch empfohlen, von Programmen
vorgeschlagenes Neubooten zunächst abzulehnen und statt dessen den Befehl
"REB\1" an einer zweckmäßigen Stelle definiert einzusetzen. Dabei bleibt der
Zählerstand ebenfalls erhalten, und der Vorgang kann nach dem Neustart
fortgesetzt werden bzw. wird automatisch fortgesetzt.
Zu Testzwecken kann der Ablauf durch Einfügen einer Zeile mit dem Befehl
"BRK\" unterbrochen werden (siehe
dazu auch "Benutzung des Remote-
Programms").
Bedingte und unbedingte Sprünge
1. innerhalb der Remote-Datei Wenn Sie bestimmte Passagen in der Remote-Datei (z.B. bei Tests oder aus einer
Entscheidungsabfrage wie "IEW\..." heraus) überspringen möchten, können Sie
das in gewohnter Weise durch Einfügen von "GOTO [Sprungmarke][<]" tun.
Die Einsprungmarke muß von der Zeichenfolge her identisch sein mit
[Sprungmarke] und mit einem Doppelpunkt (":") beginnen
(Groß/Kleinschreibung wird nicht beachtet). Mit "GOTO [Sprungmarke]" können Sie
in einer Remote-Datei auch zurückspringen; wichtig ist, daß jede Sprungmarke eindeutig ist. Wenn eine
Sprungmarke mehrfach vorkommt, wird immer die erste in der Remote-Datei
angesprungen. Wenn Sie bei "GOTO" nach der Sprungmarke
das Zeichen "<" anfügen, kehrt der Aussprung nach Abarbeitung der Teilsequenz, d.h. bei Erreichen des Ende-
Zeichens "@" nach der Sprungmarke automatisch in
die Zeile nach "GOTO" zurück. Das ist auch aus einer Abfrage heraus möglich. Bedingte Sprünge können indirekt erreicht werden, wenn der Aussprung in einen
Entscheidungskomplex (Abfrage) gelegt wird (IEF/EEF, IEI/EEI, IEW/EEW, etc.;
siehe Befehle unter "Ablaufsteuerung"). Wenn ein Sprung eingeleitet wurde,
werden bis zur Einsprungmarke alle Befehle ignoriert, auch neue Sprungbefehle. Ab Version 7.5.0.2400 steht das Befehlspaar "GSB\[Sprungmarke]" und "RET\"
zur Verfügung (GoSub und Return). Die Befehle müssen paarweise eingesetzt
werden und gestatten das Auslagern von Unterroutinen in Blöcke, die mit einer
Sprungmarke beginnen und mit "RET\" enden. Innerhalb solcher Unterroutinen
ist der Aufruf weiterer Unterroutinen sowie der Aussprung mit "JNF\..." erlaubt
(s.u.).
Beispiele: GOTO next '>>>>>>>>> '------------------------------------------ 'Starten der miro-Installation '------------------------------------------ EXE\miro-tv\disk1\install.exe STW\#32770\Installation - miro·win SWC\Installieren... MLC\ SWC\Abbruch MLC\ SWC\Abbruch MLC\ '------------------------------------------ 'Abbruch der miro-Installation '------------------------------------------ TDL\1000 :Next '<<<<<<<<< '------------------------------------------ 'Starten der "T-Online"-Installation '------------------------------------------ EXE\t-online\decoder\win\disk1\install.exe STW\GenericWClass\T-Online-Decoder SWC\Annehmen MLC\
'------------------------------------------ ' Schließen aller Ordner '------------------------------------------ :neu IEW\cabinetwclass\* CLW\1 GOTO neu EEW\
2. aus einer Remote-Datei heraus Mit dem Befehl "JNF\..." können Sie
aus einer Remote-Datei eine zweite
aufrufen, und nach deren Abarbeitung kehrt die Steuerung wieder zur ersten
Datei zurück und fährt fort mit demjenigen Befehl, der nach dem
Aussprungbefehl "JNF\..." folgt. Sie können aber auch aus der Aussprungdatei
wiederum mit "JNF\" in eine weitere Remote-Datei springen, und das bis zu fünfzehn Ebenen tief. Der Aufruf kehrt dann nach Abarbeitung der letzten
Aussprungdatei wieder in die Ausgangsdatei zurück, wobei evtl. vorhandene
lokale Variable wieder restauriert werden.
Verketten von Remote-Dateien
Es ist möglich, aus einer Remote-Datei heraus eine andere zu starten. Der Befehl
dazu lautet:
"FCH\[Dateiname][|Sprungmarke]" für FileCHange
Mit diesem Befehl wird die aktuelle Remote-Datei unabhängig von
nachfolgenden Einträgen sofort verlassen, und die Abarbeitung der in
[Dateiname] angegebenen Remote-Datei beginnt unmittelbar anschließend.
Wenn eine Sprungmarke angegeben ist, wird die neue Remote-Datei von der
Sprungmarke an abgearbeitet, ansonsten vom Anfang. Die Angabe des Dateinamen muß mit vollständigem Pfad erfolgen, wenn es sich
nicht um eine Remote-Datei aus dem Arbeitsverzeichnis handelt und darf nicht
in Anführungszeichen stehen. Der Dateiname selbst ist frei wählbar. Auf diese
Weise lassen sich einzelne Bausteine zusammenstellen, die jeweils einen
bestimmten Komplex der Fernsteuerung übernehmen und anschließend den
nächsten Baustein direkt aufrufen. Es ist aber auch möglich, eine "Remote-
Steuerdatei" in Form einer ASCII-Datei mit der Endung ".rcf"
(RemoteControlFile, RCF-Datei) einzurichten, welche die Aufruffolge steuert.
Eine solche Datei enthält zeilenweise angeordnet die Namen der einzelnen
Remote-Bausteine (z.B. für die Installation einer bestimmten
Anwendungssoftware oder die Konfiguration eines bestimmten Windows-
Komplexes), die in dieser Reihenfolge nacheinander abgearbeitet werden sollen.
Damit dies erreicht wird, muß der o.g. Befehl (als Abschlußbefehl eines solchen
Bausteins) lauten: "FCH\Toggle" Dann kehrt die Ablaufsteuerung nach Abarbeitung des jeweiligen Bausteins an
die Steuer- oder RCF-Datei zurück, welche ihrerseits wieder die nächste Remote-
Datei aktiviert. Die Lokalisierung der RCF-Datei wird vom Programm
übernommen. Für Testzwecke können innerhalb der RCF-Datei einzelne Bausteine mit einem
vorgesetzten Hochkomma auskommentiert werden. Nachgestellte, mit einem
Hochkomma abgetrennte Kommentare in den Zeilen mit den Namen der
Remote-Dateien sind ebenfalls möglich. Auch der Sprungbefehl "GOTO [Marke]"
kann eingesetzt werden. Wenn es sich bei der RCF-Datei um eine Steuerdatei handelt, die vom Benutzer
vorzeitig abgebrochen werden kann, sollten Sie als letzte Remote-Datei eine
"always.rem" eintragen. Das Programm prüft das Vorhandensein einer solchen
Datei und stellt sicher, daß die Befehle in dieser Datei in jedem Falle vor dem
Beenden ausgeführt werden. Das ist dann zweckmäßig, wenn im Verlaufe der
Abarbeitung bestimmte Einstellungen geändert wurden, die jedoch
wiederhergestellt werden müssen. Zur Speicherung der Änderungen können Sie
Variable benutzen und diese dann in der "always.rem" auf Vorhandensein oder
ihren Wert prüfen (siehe Befehl "VAR\..."). Beispiel für den Inhalt der RCF-Datei "install.rcf": winsetup.rem system.rem goto weiter 'menu.rem t-online.rem 'installiert T-Online 'repeat.rem reboot.rem :weiter symbole.rem fritzfax.rem always.rem
! Wichtig ! Alle Remote-Dateien, die nicht mit komplettem Pfad aufgerufen werden und die
RCF-Datei müssen sich im gleichen Verzeichnis wie die Remote-Exe oder in
einem Unterverzeichnis "\RemFiles\" befinden! Mit "FCH\[Dateiname]" hingegen
und über Befehlszeilenparameter können Sie beliebige Dateien aufrufen, die mit
vollständigem Pfad angegeben sind.
Ó 1996-2005 by Delphin Software
© 2006 by Delphin Software
|