Variable Funktionen in der Laufzeit erstellen

  • Servus und Hallo,

    grad mal hier angemeldet, da mir Google mal nicht weiterhilft ;)

    Ich würde gerne Funktionen während der Laufzeit erstellen a la:

    [autoit]

    Execute('Func c' & $i & '() Send("asdasd") EndFunc')

    [/autoit]

    In anderen Sprachen funktioniert das mit Eval.. hier leider nicht.

    Hat jemand ne Lösung für mich parat?

    Mfg MMM

    Einmal editiert, zuletzt von MMM (23. Juli 2009 um 17:29)

    • Offizieller Beitrag

    Erstelle doch eine Dummy-Funktion, der du den variablen Befehlsstring übergibst:

    [autoit]

    $ToDo = InputBox('Variable Befehle', 'Gib eine Befehlszeile ein', 'MsgBox(0, "TEST", "Das ist ein Testbefehl")')
    _Dummy($ToDo)

    [/autoit][autoit][/autoit][autoit]

    Func _Dummy($ToDo)
    Execute($ToDo)
    EndFunc

    [/autoit]
  • Das dumme ist, dass ich das in Verbindung mit der HotKey Funktion benutzen wollte, die aber keine Parameter zulässt :pinch:

    Ich beschreib einfach mal was ich machen möchte:

    Ich habe eine Textdatei mit folgendem Aufbau:

    Code
    {HOME};blabla
    {END};asdasd
    {DEL};324234
    {PGUP};hololo
    {PGDN};ijoo

    Jetzt soll diese Datei ausgelesen werden und auf die jeweilige Taste per Send der String hinter dem ; ausgeführt werden.

    Das sollte dann mal so in der Art aussehen:

    [autoit]

    $line = StringSplit(FileReadLine($file), ";",0)
    Execute('Func c' & $i & '() Send("' & $line[2] & '") EndFunc')
    HotKeySet($line[1], "c" & $i)

    [/autoit]

    Die Idee mit der Parameterfunktion hatte ich auch schon, doch dafür müsste ich die _IsPressed Methode nehmen und die benutzt die normalen Hexkeys und nicht diese {} Umwandlungen, welche die Übersicht in der Textdatei stark verbessern würden.

    • Offizieller Beitrag

    Jetzt soll diese Datei ausgelesen werden und auf die jeweilige Taste per Send der String hinter dem ; ausgeführt werden.


    Na genau das geht doch mit dem Bsp., dass ich dir gezeigt habe.
    Per HotkeySet wird in der dazugehörigen Funktion die Dummy-Funktion mit dem jeweiligen Befehlsstring ausgeführt.

  • Per HotkeySet wird in der dazugehörigen Funktion die Dummy-Funktion mit dem jeweiligen Befehlsstring ausgeführt.

    Ja wie soll ich denn den Befehlsstring übergeben? HotKeySet bietet keinen Parameter dafür und direkt im String funktioniert es auch nicht:

    [autoit]

    HotKeySet("{DEL}","_Dummy(Send('asd'))")

    [/autoit]
  • PRobiers mit ner zwiten funktion die der Dummy funktion die Parameter übergibt:

    [autoit]

    hokeyset("taste","_bla")
    func _bla()
    _dummy($todo)
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func _dummy($todo)
    execute($todo)
    endfunc

    [/autoit]

    Hoffe das hilft dir irgendwie :)

    Computers are like Airconditioning. They don´t work with open Windows.

  • Es geht mir ja um Variable Inhalte. Somit weiß die Funktion _bla ja immer noch nicht welche Taste nun wirklich gedrückt wurde und somit welchen Wert $todo haben soll.

    Oder gibt dem Befehlsstring eine globale Gültigkeit.

    Keine Ahnung was du damit meinst :(

  • Anstatt den "Wert" per Funktion zu übergeben besteht ja auch die Möglichkeit die Variable global zu deklarieren und einfach in der Funktion aufzurufen.
    Keine Ahnung ob das hier jetzt passt, ist schon spät. :whistling:

  • Ich habe das Gefühl, dass mich hier keiner Versteht...

    Woher soll die Funktion denn wissen welche Variable sie auslesen soll? ô.Ô

    Die Anzahl der HotKeys hängt von den Einträgen in der Textdatei ab. Somit komm ich nicht drum rum abzufragen welcher HotKey denn nun aufgerufen wurde. (Da es die variable Funktionserstellung wie ich im 1. Post gefragt hab ja anscheinend nicht gibt.)

    Also ist es vermutlich am besten ich schreibe eine Umwandlungsfunktion, die die Wörter "{HOME}" etc. in die dazugehörigen Hexwerte umwandelt, sodass auf IsPressed zurückgreifen kann und auf HotKeySet verzichte.

    (Hatte gehofft es gibt ne schönere Lösung :( )

  • Aha jetzt hab ichs.
    Es gibt ein Makro: @HotKeyPressed
    Damit lässt sich (laut Hilfe :D) der letzte Hotkey ermitteln.
    Das muss in die aufgerufene Funktion und damit kann man dann den entsprechenden Wert im Array suchen (so ca.)

    Hast du dazu einen lauffähigen Quellcode? Dann versuch ichs mal.