Post by bichlepa » 14 Feb 2015, 07:33
Bei der Arbeit an
AutoHotFlow stehe ich vor einer schweren Herausforderung. Ich möchte eine Aktion "Skript" und eine Bedingung "Expression" einführen. Dafür muss ein Code, der zuvor in ein Edit-Feld eingegeben wurde, ausgeführt werden. Eine Erschwernis ist, dass alle Instanzen der Flow Ausführung eigene Variablen besitzen, was eine unabhängige parallele Ausführung verschiedener Instanzen erlaubt. Beim Setzen und Holen von Variablen muss eine der beiden von mir geschriebenen Funktionen aufgerufen werden:
- v_setVariable(InstanceID,name,value,VariableType="Normal")
- v_getVariable(InstanceID,name,VariableType="Normal")
Ich habe schon verschiedene Möglichkeiten probiert:
- ExprEval von Uberi. Im Allgemeinen funktioniert es super, nur das Holen und Setzen von Variablen mithilfe der erwähnten Funktionen ist nicht möglich. Vielleicht könnten man die Funktion umschreiben, aber der Code ist zu kompliziert für mich.
Oder man könnte vielleicht in einer neuen Funktion alle Variablen einer Instanz als lokale Variablen schreiben und dann den Text evaluieren (was aber erfordert, dass die Evaluierung auf die lokalen variablen zugreifen kann oder innerhalb der Funktion erfolgt)
- Eval - Dynamic expression evaluation for AutoHotkey_L von Fincs. Dieselbe Geschichte wie bei ExprEval.
- Generierung eines externen Skripts, in dem vor der Ausführung des eigentlichen Skripts alle Variablen gesetzt werden und am Ende alle Variablen zurückgesendet werden. Dies habe ich bereits umgesetzt, aber die Performanz ist sehr niedrig, da dafür ein neuer AHK Prozess gestartet werden muss.
- Ersetzen von Variablennamen im Skript durch neue mit einem Präfix, z.B. Instance_5_var_... Dafür müsste man aber sämtliche Variablen erkennen, was schwierig sein dürfte bei der Fülle an ahk Befehlen.
Denkbar wäre auch, eigene Funktion zur Evaluierung zu schreiben, was aber zu kompliziert und zeitraubend wäre.
Habt ihr Ideen, wie das zu machen ist?
Bei der Arbeit an [url=http://ahkscript.org/boards/viewtopic.php?f=10&t=4404]AutoHotFlow[/url] stehe ich vor einer schweren Herausforderung. Ich möchte eine Aktion "Skript" und eine Bedingung "Expression" einführen. Dafür muss ein Code, der zuvor in ein Edit-Feld eingegeben wurde, ausgeführt werden. Eine Erschwernis ist, dass alle Instanzen der Flow Ausführung eigene Variablen besitzen, was eine unabhängige parallele Ausführung verschiedener Instanzen erlaubt. Beim Setzen und Holen von Variablen muss eine der beiden von mir geschriebenen Funktionen aufgerufen werden:
[list][*]v_setVariable(InstanceID,name,value,VariableType="Normal")
[*]v_getVariable(InstanceID,name,VariableType="Normal")[/list]
Ich habe schon verschiedene Möglichkeiten probiert:
[list][*][url=http://www.autohotkey.com/board/topic/64167-expreval-evaluate-expressions/]ExprEval von Uberi[/url]. Im Allgemeinen funktioniert es super, nur das Holen und Setzen von Variablen mithilfe der erwähnten Funktionen ist nicht möglich. Vielleicht könnten man die Funktion umschreiben, aber der Code ist zu kompliziert für mich.
Oder man könnte vielleicht in einer neuen Funktion alle Variablen einer Instanz als lokale Variablen schreiben und dann den Text evaluieren (was aber erfordert, dass die Evaluierung auf die lokalen variablen zugreifen kann oder innerhalb der Funktion erfolgt)
[*][url=http://www.autohotkey.com/board/topic/82823-eval-evaluate-autohotkey-expressions-dynamically/]Eval - Dynamic expression evaluation for AutoHotkey_L von Fincs[/url]. Dieselbe Geschichte wie bei ExprEval.
[*]Generierung eines externen Skripts, in dem vor der Ausführung des eigentlichen Skripts alle Variablen gesetzt werden und am Ende alle Variablen zurückgesendet werden. Dies habe ich bereits umgesetzt, aber die Performanz ist sehr niedrig, da dafür ein neuer AHK Prozess gestartet werden muss.
[*]Ersetzen von Variablennamen im Skript durch neue mit einem Präfix, z.B. Instance_5_var_... Dafür müsste man aber sämtliche Variablen erkennen, was schwierig sein dürfte bei der Fülle an ahk Befehlen.[/list]
Denkbar wäre auch, eigene Funktion zur Evaluierung zu schreiben, was aber zu kompliziert und zeitraubend wäre.
Habt ihr Ideen, wie das zu machen ist?