Plug-In Schnittstelle

  • Hallo,

    ich versuche gerade eine kleine Plug-In UDF zu schreiben. So siehts im Moment aus:

    [autoit]

    $Fileopen = FileOpen("Plug-In.txt",0)

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

    $Read = FileRead($Fileopen)

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

    $StringSplit = StringSplit($Read,@CRLF)

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

    For $Var1 = 1 To $StringSplit[0]
    If Not $StringSplit[$Var1] = "" Then

    Execute($StringSplit[$Var1])

    EndIf
    Next

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

    Sleep(3000)

    [/autoit]

    und die Textdatei:

    Code
    GUICreate("Form1", 300, 300)
    GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    GUICtrlCreateLabel("Label1", 8, 32, 36, 17)
    GUICtrlCreateButton("Button1", 8, 48, 75, 25, 0)
    GUISetState(@SW_SHOW)

    So. Voher weiß nun mein Script, ob auf ein Button geklickt wurde. Kann man z.b. Variablen aus einer Textdatei auslesen?

    Bin für jede Hilfe dankbar.

  • Kann man z.b. Variablen aus einer Textdatei auslesen?

    Also wenn Du die Variable mit FileWrite(-Line) in eine Textdatei schreibst, dann kannst Du diese mit FileRead(-Line) auch wieder einlesen.

    Aber ich glaube nicht, das Deepred das sucht, denn darauf wäre er sicherlich selber gekommen. Aber ich verstehe es nun mal so und das ist nicht "blonde Verstehen". ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Also so meinte ich es nicht direkt. Also sagen wir mal in der Datei steht fogendes:

    Code
    $Handle = GUICreate("Form1", 300, 300)
    GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    GUICtrlCreateLabel("Label1", 8, 32, 36, 17)
    GUICtrlCreateButton("Button1", 8, 48, 75, 25, 0)
    GUISetState(@SW_SHOW)

    wie kann man nun die Variable $Handle auslesen?
    Ich hab das hier mal im Forum gelesen aber nicht mehr wiedergefunden. Es war irgendwaas mit EnvGet oder so. Keine Ahung.

  • Also EnvGet usw.? Meinst Du das hier?

    Spoiler anzeigen
    [autoit]

    ; setzen des Wertes einer Umgebungsvariablen
    EnvSet("MYENV", "Dies ist ein Test.")

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

    ; ermitteln des Wertes einer Umgebungsvariablen
    $var = EnvGet("MYENV")
    MsgBox(4096, "Die Pfad-Variable lautet:", $var)

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • So vllt.?

    Spoiler anzeigen
    [autoit]

    ; setzen des Wertes einer Umgebungsvariablen
    EnvSet("MYENV", '"GUICreate("Form1", 300, 300)"')

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

    ; ermitteln des Wertes einer Umgebungsvariablen
    $var = EnvGet("MYENV")
    MsgBox(4096, "Die Pfad-Variable lautet:", $var)

    [/autoit]

    Ich habe davon auch keine Ahnung, aber ist eine Sache, die Frau sich ja annehmen kann.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi
    aber EnvSet und dUmgebungsvariablen unter Windows.en Handle des GUIS auslesen, sind 2 verschiedene Sachen.
    Den Handle des GUIs brauchst du wenn du das GUI löschen verstecken .. möchtest.

    [autoit]

    GUISetState(@SW_SHOW, $Handle)

    [/autoit]


    EnvSet ist zum setzten der Umgebungsvariablen unter Windows.

    MfG
    Der_Doc

  • Der_Doc.
    Also ich habe so noch gar nicht durchgeblickt was er wollte und da er nicht drauf geantwortet hat, gehe ich mal davon aus, das eine der beiden Lsg. von uns wohl richtig sind. Da es, wie Du bereits geschreiben hast ja zwei verschiedene Sachen sind, hat er etwas zum testen. Vllt. mag er uns ja sagen was nun das richtige war.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Eventuell so?

    [autoit]

    $Varible = "xy" ;Mit RegEx oä. auslesen
    $Befehl = 'GUICreate("Form1", 300, 300)' ;Mit RegEx oä. auslesen
    Assign($Variable, Execute($Befehl))

    [/autoit]
  • Wenn ich nur genau verstehen würde, was Deepred genau möchte, dann würde mir dieses Thema nicht den Kopf zerbrechen. Manno, der (Kopf) ist doch nicht so groß.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Ich hab mal einen Beispiel erstellt:

    [autoit]

    $Texdatei = 'GUICreate("TestGUI", 300, 300)' & @CRLF _ ;Handle von der GUI auslsen. Aber wie?
    & "GUISetState()"

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

    $Split = StringSplit($Texdatei, @CRLF)

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

    For $NextLoop = 1 To $Split[0]
    If Not $Split[$NextLoop] = "" Then
    Execute($Split[$NextLoop])
    EndIf
    Next

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

    MsgBox(0,"","Ende")

    [/autoit]

    Zeile 1: Hier steht das, was in der Textdatei stehen würde. Also GuiCreate. In einem normalen Script schreibt man ja immer
    $GUI = GUICreate("Titel",600,600)
    Variable $GUI gibt ja eigentlich immer das Handle wieder. Aber wie komme ich jetzt in meinem Script an diese Variable dran?

  • Schau dir mal diese Funktion an, hab ich gestern/heute Nacht noch zusammengebastelt ;)

    [autoit]

    Func EvaluateSingleLine($Line, $Flag)
    Local $sRegExPatternA = "^[ ]*\$(.*?)[ ]*=[ ]*(.*?)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $sRegExPatternC = "^[ ]*(.*)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $aRegEx
    If IsArray(($aRegEx = StringRegExp($Line, $sRegExPatternA, 3))) Then ;für Assignments zB $xy = blaa
    Assign($aRegEx[0], Execute($aRegEx[1]), $Flag) ;Flag für Scope der Variable (^= Global/Local)
    ElseIf IsArray(($aRegEx = StringRegExp($Line, $sRegExPatternC, 3))) Then ;für reine Funktionen zB Send("#r")
    Execute($aRegEx[0])
    Else
    SetError(1,$Line,False) ;Sonst wohl irgendeine andere Zeile
    EndIf
    SetExtended($Line,True)
    EndFunc ;==>EvaluateSingleLine

    [/autoit]

    Edit: Wenn du das Handle willst, solltest du schon zB '$Handle = GUICreate("TestGUI", 300, 300)' reinschreiben oder?!
    Dann funktionierts auch ;)

    Einmal editiert, zuletzt von JoEtHeKiLlEr (12. April 2009 um 13:17)

  • Meinst du es so?:

    [autoit]

    Local $5

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

    EvaluateSingleLine($5, '$Handle = GUICreate("TestGUI", 300, 300)')

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

    GUISetState(@SW_SHOW,$5)

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

    MsgBox(0,"", $5)

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

    Func EvaluateSingleLine($Line, $Flag)
    Local $sRegExPatternA = "^[ ]*\$(.*?)[ ]*=[ ]*(.*?)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $sRegExPatternC = "^[ ]*(.*)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $aRegEx
    If IsArray(($aRegEx = StringRegExp($Line, $sRegExPatternA, 3))) Then ;für Assignments zB $xy = blaa
    Assign($aRegEx[0], Execute($aRegEx[1]), $Flag) ;Flag für Scope der Variable (^= Global/Local)
    ElseIf IsArray(($aRegEx = StringRegExp($Line, $sRegExPatternC, 3))) Then ;für reine Funktionen zB Send("#r")
    Execute($aRegEx[0])
    Else
    SetError(1, $Line, False) ;Sonst wohl irgendeine andere Zeile
    EndIf
    SetExtended($Line, True)
    EndFunc ;==>EvaluateSingleLine

    [/autoit]
  • Habs nochmal überarbeitet, jetzt gehts :D

    [autoit]

    $Line = '$Handle = GUICreate("TestGUI", 300, 300)'
    EvaluateSingleLine($Line)
    $Line = 'GUISetState(@SW_SHOW,$Handle)'
    EvaluateSingleLine($Line)
    $Line = 'Sleep(3000)'
    EvaluateSingleLine($Line)

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

    Func EvaluateSingleLine($Line, $Flag = 2)
    Local $sRegExPatternA = "^[ ]*\$(.*?)[ ]*=[ ]*(.*?)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $sRegExPatternC = "^[ ]*(.*)[ ]*$" ;Kommentare sind nicht erlaubt!!!
    Local $aRegEx
    $aRegExA = StringRegExp($Line, $sRegExPatternA, 3)
    $aRegExC = StringRegExp($Line, $sRegExPatternC, 3)
    If IsArray($aRegExA) Then ;für Assignments zB $xy = blaa
    Assign($aRegExA[0], Execute($aRegExA[1]), $Flag) ;Flag für Scope der Variable (^= Global/Local)
    ElseIf IsArray($aRegExC) Then ;für reine Funktionen zB Send("#r")
    Execute($aRegExC[0])
    Else
    SetError(1,$Line,False) ;Sonst wohl irgendeine andere Zeile
    EndIf
    SetExtended($Line,True)
    EndFunc ;==>EvaluateSingleLine

    [/autoit]
  • Ja das funktioniert gut. Aber so gehts auch:

    [autoit]

    $Source = '$Form1 = GUICreate("Form1", 377, 160, 192, 124)' & @CRLF _
    & '$Button1 = GUICtrlCreateButton("Button1", 0, 0, 75, 25, 0)' & @CRLF _
    & '$Button2 = GUICtrlCreateButton("Button2", 0, 32, 75, 25, 0)' & @CRLF _
    & '$Button3 = GUICtrlCreateButton("Button3", 0, 64, 75, 25, 0)' & @CRLF _
    & '$Button4 = GUICtrlCreateButton("Button4", 0, 96, 75, 25, 0)' & @CRLF _
    & '$Button5 = GUICtrlCreateButton("Button5", 0, 128, 75, 25, 0)' & @CRLF _
    & '$Edit1 = GUICtrlCreateEdit("", 80, 0, 289, 153)' & @CRLF _
    & 'GUISetState(@SW_SHOW, $Form1)' & @CRLF _
    & '$x = InputBox("Hallo", "Irgendwas")' & @CRLF _
    & 'GUICtrlSetData($Edit1, $x)' & @CRLF _
    & 'Sleep(3000)' & @CRLF _
    & '$Form2 = GUICreate("Form2", 700, 700)' & @CRLF _
    & 'GUISetState(@SW_SHOW, $Form2)' & @CRLF _
    & 'WinSetOnTop($Form2, "", 1)' & @CRLF _
    & 'GUIDelete($Form1)' & @CRLF _
    & 'WinSetOnTop($Form2, "", 0)' & @CRLF _
    & 'Sleep(1000)' & @CRLF _
    & 'GUIDelete($Form2)' & @CRLF _
    & 'MsgBox(0, "", "Ende")' & @CRLF _

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

    _RunPlugIn($Source)

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _RunPlugIn
    ; Description ...: Führt einen Plug-In aus
    ; Syntax.........: _RunPlugIn($Source)
    ; Parameters ....: $Source - Source in AutoIt
    ; Author ........: Burak Keskin <[email='Burak.keskin@arcor.de'][/email]>
    ; ===============================================================================================================================
    Func _RunPlugIn($Source)
    $Split = StringSplit($Source, @CRLF)
    For $NextLoop = 1 To $Split[0]
    If Not $Split[$NextLoop] = "" Then
    $Split2 = StringSplit($Split[$NextLoop], "=")
    If $Split2[0] > 1 Then
    Assign(StringTrimLeft(StringTrimRight($Split2[1], 1), 1), Execute(StringTrimLeft($Split2[2], 1)))
    ElseIf $Split2[0] = 1 Then
    Execute($Split[$NextLoop])
    EndIf
    EndIf
    Next
    EndFunc ;==>_RunPlugIn

    [/autoit]

    Wie mache ich da nun For -Next Schleifen rein?