Frage zu Execute

  • Hi com,
    ich habe eine kurze frage zu execute:
    warum funkioniert

    Execute
    [autoit]

    $file = FileOpen(@ScriptDir & "\test.au3")
    $test = FileRead($file)
    Execute($test)

    [/autoit]

    das hier:

    Kleines Script
    [autoit]

    MsgBox(0, "Test", "A")
    MsgBox(0, "Test", "B")

    [/autoit]

    und das hier nicht?

    Großes Script
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    Global $aButton[5]
    $gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, 0, $WS_POPUP, $WS_EX_TOPMOST)
    $aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
    $aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
    $aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
    $aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
    $aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
    $pic = GUICtrlCreatePic(".\text.JPG", 0, 0)
    GUISetState(@SW_SHOW)
    $pos = WinGetPos($gui)
    _GuiHole($gui, 0, 0, 150, 150)
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aButton[4]
    ExitLoop
    Case $aButton[0]
    MsgBox(0, '', 'Button1 geklickt')
    Case $aButton[1]
    MsgBox(0, '', 'Button2 geklickt')
    Case $aButton[2]
    MsgBox(0, '', 'Button3 geklickt')
    Case $aButton[3]
    MsgBox(0, '', 'Button4 geklickt')
    EndSwitch
    WEnd
    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $outer_rgn, $inner_rgn, $combined_rgn
    $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _WinAPI_DeleteObject($outer_rgn)
    _WinAPI_DeleteObject($inner_rgn)
    _AddCtrlRegion($combined_rgn, $aButton)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc
    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    Next
    Else
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    EndIf
    EndFunc

    [/autoit]

    (das ist nicht von mir, nur ein beispiel, habe irgentwas rausgekramt ;))
    ich verstehe das nicht ?(

    ps: wie ihr seht, muss im script dir das script test sein, führt das mit beiden beispielen durch

  • Ich denke wegen den Includes.
    Die setzt normalerweise der PreCompiler.
    Da das script aber kompiliert wird und dann eine datei gelesen wird und ausgeführt, ersetzt der PreCompiler die Includes nicht in der anderen datei.[MSIE_newline_end ]

    • Offizieller Beitrag

    Was willst du eigentlich genau wissen? Das 2. und 3. Script hat doch nichts mit Execute zu tun, oder bin ich heute wirklich blind? :pinch:

  • 1. ob du blind bist weiß ich nicht, 2. ich lese den inhalt der test.au3 aus und stecke sie in den execute
    3. bin jetzt nicht am meinem pc, habe aber eine idee die ich jetzt nicht testen kann, villt könte das einer von euch machen:

    IDEE
    [autoit]

    ; For & Next Schleife
    $file = FileOpen(@ScriptDir & "\test.au3")
    ; $afile = Array (String) mit dem gesamten inhalt, weiß grade nicht, wie zu machen
    For $i = 0 To $afile[0]
    $befehl = FileReadLine($file, $i)
    Execute($befehl)
    Next

    [/autoit]

    wie gesagt, kann es nicht testen, musste es direkt schreiben
    übernehme keine garantie für fehler ^^
    andere mölichkeit, vorher zeilen zählen mit if $zeile = "" also leer letzte zeile muss also leer sein und dann eine while $i < $zeilen

    Edit1: das mit inlcudes ist eig klar ;)

    Edit2: ich habe die idee!!
    villt hängt ich execute bei den includes auf?
    also includes ins script und keine in dem execute ;) versucht das bitte, danke :P

  • das mit execute scheint einfach nicht funktionieren zu wollen, auch nicht, wenn man alle includes, kommentare und absätze ohne inhalt weglässt... das problem ist, dass execute nur bestimmte befehle ausführen kann, ich werd wohl eine funktion zum vorher includen schreiben müssen (also in das script schreiben) <= ist ja aber nicht allzu schwer

    wenn jemand noch eine andere antwort hat, bitte posten (das mit execute wäre sicherer (auf individualitätsebene))