![]() |
ScriptingEngine?
Hi,
ich suche derzeit nach einer Art ScriptingEngine... Ich habe Scripte, die ungefähr so aussehen:
Code:
($x sind Variablen; alles andere Strings bzw. Anweisungen; ist eines der komplizierteren... ;))
findwindow "wndname" $1 // findet das Fenster
findchild $1 "pagecontrol" $2 // findet das pagecontrol findchild $2 "label" $3 // findet das Label getnumber $3 "Nr. " " um" $4 // findet die Nummer x heraus, x steht in $4 findchild $2 "btn".$4 $5 sendmessage bm_click $5 END Nun frage ich mich, wie man sowas machen kann, dass man das ganze sozusagen interpretiert. Muss ich das ganze etwa per copy, delete, ... machen??? Dann würde ich glatt durchdrehen! :freak: Naja... das Problem sind da eher Knackpunkte wie die zusammensetzung eines Strings und einer Variable (z.B. "btn".$4). Gibt es irgendwo so eine Art "Vorlage"? Oder habt ihr eine Idee, wie man sowas machen kann? Chris |
Moin Chris,
mit einer Idee kann ich dienen ;-) Da es sich offensichtlich um ein sequentiell abzuarbeitendes Script handelt, könntest Du es so machen: Voraussetzungen:
Jetzt kannst Du die Liste in einer Schleife durchgehen, und die einzelnen Zeilen in ihre Bestandteile zerlegen, wobei als erstes wohl immer ein Schlüsselwort steht (hoffentlich ;-) ), gefolgt von Parametern, in Abhängigkeit des Schlüsselwortes. Als Beispiel mal Deine erste Zeile: Schlüsselwort findwindow. Jetzt weisst Du, dass als nächstes der Name es Fensters erscheinen muss, und dann der Name einer Variablen, in der das Ergebnis gespeichert werden soll. Dann kannst Du die Funktion ausführen, und das Ergebnis in der Variablenliste speichern. Soll der Wert einer Variablen verwendet werden, muss dieser dann aus der Liste ausgelesen werden. Ggf. kann die Liste auch eine einfache Stringliste in der Form Variablenname=Wert sein. Für eventuelle vordefinierte Konstanten (bm_click) wäre eine entsprechende weitere Liste ganz sinnvoll. |
|
Hi,
@Christian: also so, oder so ähnlich, hatte ich mir das auch schon gemacht, allerdings überlegte ich nach einer Möglichkeit das ohne es so kompliziert zu machen (wobei man sagen muss, dass deine Möglichkeit viel einfacher ist, als ich sie mir ausgedacht hab). [EDIT] Da fällt mir: das Problem ist, dass für jeden Befehl ich eine if-Abfrage machen muss, weil ja jeder Befehl eine andere Struktur hat und andere Befehle verwendet. Also zum Beispiel sendmessage verlangt andere Parameter, als findwindow. Auch die Anzahl ist unterschiedlich. Das Problem ist z.B. auch, dass Zusammensetzen (wie gesagt: ein String.eine Variable). Wie bitte soll ich das anstellen? :| [/EDIT] Deswegen... ...@chris: werde mir das mal ansehen. Allerdings scheint mir das schon wieder ein wenig zu aufwendig. Aber ich habe jetzt nur mal einen Blick drauf geworfen! Chris |
Moin Chris,
je komplizierter/flexibler die zu verarbeitende Sprache ist, umso komplizierter wird halt auch die Verarbeitung. Solange sich das ganze sequentiell abarbeiten lässt und dabei die einzelnen Funktionen und Paramter leicht zu trennen sind, ist die Umsetzung nicht ganz so schwierig. Sobald Du mit bedingtem Programmablauf (womöglich verschachtelt) und Schleifen anfängst wird's merklich komplexer. |
Moin Chris,
Du kannst doch den Wert einer Variablen aus der vorgeschlagenen Tabelle auslesen (Eigenschaft z.B. sWert := slVariablen.Values['$4'];). Diesen verbindest Du dann mittels + mit der Konstanten. |
Mit Schleifen usw. will ich gar nichts anfangen...
Denn eigentlich bringen mir Schleifen nichts. Ich habe gerade dieses Innerfuse-Teil heruntergeladen. Also wirklich begeistert bin ich nicht. Nicht einmal eine install.txt. :evil: Naja... werde das ganze mal versuchen. Chris |
Stimmt... Warum mach ich die Sache eigentlich selber so scher??? :wall:
Chris |
Hi,
ich hab gerade bei der ganzen Sache ein Problem (die Klasse an sich funktioniert wunderbar): Ich bräuchte eine Funktion, die mir den n. Parameter liefert. Also z.B.:
Code:
dann ist findwindow der 0., test window der 1. und $1 der 2.
findwindow "test window" $1
Hat jemand dafür eine Funktion parat? Ich habe im Moment nämlich keine Idee, wie ich das machen soll, dass Problem ist halt die Sache mit den Strings... :( Chris |
Na ja, im Prinzip werden die Parameter durch Leerzeichen getrennt. Nur wenn vor dem Leerzeichen eine ungerade Anzahl an Gänsefüßchen steht, dann ist das Leerzeichen kein Trennoperator. Also Zeichen für Zeichen durchgehen, zusätzlich boolsche Variable für String oder nicht und falls kein String, trennen am Leerzeichen.
Alternativ dazu die Anzahl der Gänsefüßchen vor dem Leerzeichen ermitteln: Falls ungerade -> Leerzeichen ignorieren, ansonsten trennen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz