Skript soll Skript erstellen ?

  • Hi
    hab ma sone farege die mir seid längerem quält :D
    So ich würde gerne ein skript schreiben worin sozusagen ein 2 skript drin ist .
    z.b

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}","_ende")
    Global $go=1

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

    $Id=AgentStartup()

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

    AgentShow($Id[1])
    AgentSetPosition($Id[1])
    AgentSpeak($Id[1],"Hallo Name")
    AgentAnimate($Id[1],"Confused")
    AgentThink($Id[1],"Hört der mich??")

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

    Do
    Sleep ( 100 )
    Until $go=0

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

    AgentShutdown($Id[0],$Id[1])

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

    Func AgentStartup($char="merlin.acs")
    Local $result[2]
    $Agent = "Agent.Control.2"
    If IsObj($Agent) Then
    $Agent = ObjGet("",$Agent)
    Else
    $Agent = ObjCreate($Agent)
    EndIf
    $Agent.Connected = 1
    $Agent.Characters.Load ("Rover",@WindowsDir & "\Msagent\Chars\"&$char)
    $A_Chr = $Agent.Characters.Character("rover")
    $result[0]=$Agent
    $result[1]=$A_Chr
    Return $result
    EndFunc

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

    Func AgentShow($CharId)
    $CharId.Show()
    EndFunc

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

    Func AgentAnimate($CharId,$AnimationName)
    $CharId.Play($AnimationName)
    EndFunc

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

    Func AgentSpeak($CharId,$Text)
    $CharId.Speak($Text)
    EndFunc

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

    Func AgentThink($CharId,$Text)
    $CharId.Think($Text)
    EndFunc

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

    Func AgentSetPosition($CharId,$X=-1,$Y=-1)
    If $X=-1 Then $X=@DesktopWidth/2-100
    If $Y=-1 Then $Y=@DesktopHeight/2-100
    $CharId.MoveTo ($X,$Y)
    EndFunc

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

    Func AgentHide($CharId)
    $CharId.Hide()
    EndFunc

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

    Func AgentShutdown($Agent,$CharId)
    $CharId.Hide()
    $CharId.Stop()
    $Agent.Connected = 0
    $Agent = ""
    EndFunc

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

    Func _ende()
    $go=0
    EndFunc

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


    dieses skript soll halt im 2 skript stehen oder per include benuzt werden .
    davohr soll aber eine msgbox kommen wo man den namen reinschreibt den er dan sagen soll :|

  • sorry .. ich versteh die frage nicht ..

    du willst ein script .. das was machen soll ?

    und dann soll es ein zweites öffnen ?! und dich nach einem namen fragen =?!

    und das zweite tut was ?!

    warum dann 2 skripte ?

    grund ```! ?

    bye

  • Nein das 1rste skript macht sozusagen das 2 skript .
    also die reihen folge ist soo :
    1. 1rst skript starten
    2. ein msgbox kommt und fragt nach dem namen .
    3. 1rst skript schreibt das 2skript
    3 .2tes skript wurde erstellt und wird ausgeführt (wen man drauf klickt)
    4 . der magier kommt ins bild und sagt z.b hallo (den eingegebenen namen)
    hört er mich ?
    das problem ich weis nicht wie ich dem 1rst skript sagen soll das re das 2 skript machen soll und den namen mit einscfreibt :|

  • warum dann n zweites script ..

    .. wenn du sowieso jedes mal n namen eingeben must .. dan kannst du des doch gleich in einem script machen ...

    ansonsten denk isch schon, dass du mit filewrite in eine *.au3 rein schrieben kannst ..

    nur das mit dem compilieren .. wird glaube ich heikel ..

    aber warum umgehst du dann nicht einfach das...

    lager doch einfach die "namen's" variable aus ...

    z.B. *.ini ..

    das script kannst du ja dann schon fertig erstellt, als exe irgend wo hin legen ..

    und mit script 1 nur noch in die *.ini den namen schreiben ..

    dann mit run.. die *.exe ( dein zweites script) starten.. dieses läd sich .. den "NaMeN " auf der *.ini ..

    und alles isch gut ...

    ???

    oder ??

  • ja schon aber

    ich würde gern so was wie eine Grußkarte machen, wo man einfach nur den Namen reinschreibt und das programm

    macht mir die Grußkarte mit dem gewünschten Namen .

    (und das soll noch halbwegs einfach gehalten sein da ich die exe gern anderen Leuten geben will die nich viel ahnung mit PCs haben )

    außerdem habe ich noch eine frage also :

    wie kann ich autoit sagen wo genau der Name reingeschrieben werden soll ? Zeile spalten etc .

  • Vielleicht dieser befehl?

    [autoit]

    Filewriteline

    [/autoit]

    Jedoch kann ich mir nicht zu 100% vorstellen wie dein Programm aussehen soll...hast du schon nen quellcode?

  • hi du schau dir mal das an ist super einfach geschrieben (nicht von mir)

    Spoiler anzeigen

    #include <GUIConstants.au3>

    GUICreate("Hallo Welt", 200, 100)
    GUICtrlCreateLabel("Hallo Welt! Wie geht's?", 30, 10)
    $okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $okbutton
    MsgBox(0, "GUI Event", "Du hast auf OK geklickt!")

    Case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    ExitLoop
    EndSelect
    WEnd


    hoffe das du das gescht hast.

  • nein snow21 sowas hat er garanitert nicht gesucht ;)

    [autoit]


    #include <file.au3>
    Do
    $name = InputBox("Name","Bitte gib den Namen der Person an","")
    until $name <> ""

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

    _FileCreate ("Geburtstagskarte.au3")
    _FileWriteToLine ("Geburtstagskarte.au3",1,"deinencodehier",1)

    [/autoit]

    das könnte dir warscheinlich ziemlich weiterhelfen^^

  • habs mir anders vorgestellt (viel zu kompliziert) aber ich muss sagen deine methode gefällt mir besser BigX nur wie soll man den da einen ganzen Code rein bekommen ,alles in einer Zeile ? :D

  • [autoit]

    MsgBox (1, "" , "Nein!"&@CRLF&"Du kannst mir @CRLF auch Zeilenumbrüche machen!")

    [/autoit]


    Am besten machst du den Code in eine Variable $CodeScript

    Und den schreibst du dann am Anfang in die Variabel.
    Also

    [autoit]

    $CodeScript = "Hallo"&@CRLF&"Dies ist das Skript"

    [/autoit]


    Bitte ;)

  • Ich glaube ich habs...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    GUICreate("Out.exe mit Namen generieren")
    $NameID = GUICtrlCreateInput("",20,20,200,20)
    $generieren = GUICtrlCreateButton("Erzeuge Out.exe",20,50)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $generieren
    $name = GUICtrlRead($NameID)
    If $name = "" Then
    msgbox(0,"Fehler","Geben Sie einen Namen ein !")
    Else
    _ErzeugeExe($name)
    Msgbox(0,"Fertig","Das Script finden sie unter dem Namen 'Out.exe' im Ordner dieses Scripts.")
    Exit
    EndIf
    EndSwitch
    WEnd

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

    Func _ErzeugeExe($name)
    $fileInhalt = ""
    $fileInhalt &= '$name = "'& $name & '"' & @CRLF
    $fileInhalt &= '$Id=AgentStartup()' & @CRLF
    $fileInhalt &= 'AgentSetPosition($Id[1])' & @CRLF
    $fileInhalt &= 'AgentShow($Id[1])' & @CRLF
    $fileInhalt &= 'AgentSpeak($Id[1],"Hallo " & $name & " !")' & @CRLF
    $fileInhalt &= 'Sleep(5000)' & @CRLF
    $fileInhalt &= 'AgentShutdown($Id[0],$Id[1])' & @CRLF
    $fileInhalt &= 'Func AgentStartup($char="merlin.acs")' & @CRLF
    $fileInhalt &= ' Local $result[2]' & @CRLF
    $fileInhalt &= ' $Agent = "Agent.Control.2"' & @CRLF
    $fileInhalt &= ' If IsObj($Agent) Then' & @CRLF
    $fileInhalt &= ' $Agent = ObjGet("",$Agent)' & @CRLF
    $fileInhalt &= ' Else' & @CRLF
    $fileInhalt &= ' $Agent = ObjCreate($Agent)' & @CRLF
    $fileInhalt &= ' EndIf' & @CRLF
    $fileInhalt &= ' $Agent.Connected = 1' & @CRLF
    $fileInhalt &= ' $Agent.Characters.Load ("Rover",@WindowsDir & "\Msagent\Chars\"&$char)' & @CRLF
    $fileInhalt &= ' $A_Chr = $Agent.Characters.Character("rover")' & @CRLF
    $fileInhalt &= ' $result[0]=$Agent' & @CRLF
    $fileInhalt &= ' $result[1]=$A_Chr' & @CRLF
    $fileInhalt &= ' Return $result' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentShow($CharId)' & @CRLF
    $fileInhalt &= ' $CharId.Show()' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentAnimate($CharId,$AnimationName)' & @CRLF
    $fileInhalt &= ' $CharId.Play($AnimationName)' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentSpeak($CharId,$Text)' & @CRLF
    $fileInhalt &= ' $CharId.Speak($Text)' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentThink($CharId,$Text)' & @CRLF
    $fileInhalt &= ' $CharId.Think($Text)' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentSetPosition($CharId,$X=-1,$Y=-1)' & @CRLF
    $fileInhalt &= ' If $X=-1 Then $X=@DesktopWidth/2-100' & @CRLF
    $fileInhalt &= ' If $Y=-1 Then $Y=@DesktopHeight/2-100' & @CRLF
    $fileInhalt &= ' $CharId.MoveTo ($X,$Y)' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentHide($CharId)' & @CRLF
    $fileInhalt &= ' $CharId.Hide()' & @CRLF
    $fileInhalt &= 'EndFunc' & @CRLF
    $fileInhalt &= 'Func AgentShutdown($Agent,$CharId)' & @CRLF
    $fileInhalt &= ' $CharId.Hide()' & @CRLF
    $fileInhalt &= ' $CharId.Stop()' & @CRLF
    $fileInhalt &= ' $Agent.Connected = 0' & @CRLF
    $fileInhalt &= ' $Agent = ""' & @CRLF
    $fileInhalt &= 'EndFunc'

    FileDelete(@TempDir & "\GenExe.au3")
    FileWrite(@TempDir & "\GenExe.au3",$fileInhalt)

    $au3path = RegRead("HKLM\Software\AutoIt v3\AutoIt","InstallDir")
    $prg = $au3path & '\Aut2Exe\Aut2Exe.exe /in "' & @TempDir & '\GenExe.au3"'
    $prg &= ' /out "' & @ScriptDir & '\Out.exe"'
    RunWait($prg,@TempDir)
    Sleep(100)
    FileDelete(@TempDir & "\GenExe.au3")
    EndFunc

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Das skript von Micha_he find ich sehr interesant und das wollte ich ma um eine paar funktionen für den Magier machen aber das hat nich so hingeauhen wollte eigenlich nur das mit rein machen :

    Spoiler anzeigen
    [autoit]


    $fileInhalt &= "HotKeySet(" {ESC}"," _ende")" & @CRLF
    $fileInhalt &= "Global $go=1" & @CRLF
    $fileInhalt &= "Global $name" & @CRLF
    $fileInhalt &= "$Id=AgentStartup()" & @CRLF
    $fileInhalt &= "AgentShow($Id[1])" & @CRLF
    $fileInhalt &= "AgentSetPosition($Id[1])" & @CRLF
    $fileInhalt &= "AgentSpeak($Id[1]," Hallo " & $name)" & @CRLF
    $fileInhalt &= "AgentAnimate($Id[1]," Confused") &@CRLF"
    $fileInhalt &= "AgentThink($Id[1]," Hört der mich??")" & @CRLF
    $fileInhalt &= "Do" & @CRLF
    $fileInhalt &= "Sleep ( 100 )" & @CRLF
    $fileInhalt &= "Until $go=0" & @CRLF
    $fileInhalt &= "AgentShutdown($Id[0],$Id[1])" & @CRLF
    $fileInhalt &= "Func AgentStartup($char=" merlin.acs")" & @CRLF
    $fileInhalt &= "Local $result[2]" & @CRLF
    $fileInhalt &= "$Agent = " Agent.Control.2"" & @CRLF
    $fileInhalt &= "If IsObj($Agent) Then" & @CRLF
    $fileInhalt &= "$Agent = ObjGet("",$Agent)" & @CRLF
    $fileInhalt &= "Else" & @CRLF
    $fileInhalt &= "$Agent = ObjCreate($Agent)" & @CRLF
    $fileInhalt &= "EndIf" & @CRLF
    $fileInhalt &= "$Agent.Connected = 1" & @CRLF
    $fileInhalt &= "$Agent.Characters.Load ("Rover",@WindowsDir & "\Msagent\Chars\"" & $char) & @CRLF
    $fileInhalt &= "$A_Chr = $Agent.Characters.Character("rover")" & @CRLF
    $fileInhalt &= "$result[0]=$Agent&" @CRLF
    $fileInhalt &= "$result[1]=$A_Chr&" @CRLF
    $fileInhalt &= "Return $result&" @CRLF
    $fileInhalt &= "EndFunc&" @CRLF
    $fileInhalt &= "Func AgentShow($CharId)" & @CRLF
    $fileInhalt &= "$CharId.Show()" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentAnimate($CharId,$AnimationName)" & @CRLF
    $fileInhalt &= "$CharId.Play($AnimationName)" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentSpeak($CharId,$Text)" & @CRLF
    $fileInhalt &= "$CharId.Speak($Text)" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentThink($CharId,$Text)" & @CRLF
    $fileInhalt &= "$CharId.Think($Text)" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentSetPosition($CharId,$X=-1,$Y=-1)" & @CRLF
    $fileInhalt &= "If $X=-1 Then $X=@DesktopWidth/2-100" & @CRLF
    $fileInhalt &= "If $Y=-1 Then $Y=@DesktopHeight/2-100" & @CRLF
    $fileInhalt &= "$CharId.MoveTo ($X,$Y)" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentHide($CharId)" & @CRLF
    $fileInhalt &= "$CharId.Hide()" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF
    $fileInhalt &= "Func AgentShutdown($Agent,$CharId)" & @CRLF
    $fileInhalt &= "$CharId.Hide()" & @CRLF
    $fileInhalt &= "$CharId.Stop()" & @CRLF
    $fileInhalt &= "$Agent.Connected = 0" & @CRLF
    $fileInhalt &= "$Agent = """ & @CRLF
    $fileInhalt &= "EndFunc&" @CRLF
    $fileInhalt &= "Func _ende()" & @CRLF
    $fileInhalt &= "$go=0" & @CRLF
    $fileInhalt &= "EndFunc" & @CRLF

    [/autoit]


    dachte das das auch funzen würde tuts aber net :huh: was isn daran falsch ?

  • So geht das auch:

    Spoiler anzeigen
    [autoit]

    Global $Data

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

    $Input = InputBox("Name", "Bitte gib Deinen Namen an.")

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

    $Data &= 'HotKeySet("{ESC}", "_ende")' & @CRLF
    $Data &= 'Global $go = 1' & @CRLF
    $Data &= '$Id = AgentStartup()' & @CRLF
    $Data &= 'AgentShow($Id[1])' & @CRLF
    $Data &= 'AgentSetPosition($Id[1])' & @CRLF
    $Data &= 'AgentSpeak($Id[1], "Hallo ' & $Input & '")' & @CRLF
    $Data &= 'AgentAnimate($Id[1], "Confused")' & @CRLF
    $Data &= 'AgentThink($Id[1], "Hört der mich??")' & @CRLF
    $Data &= 'Do' & @CRLF
    $Data &= ' Sleep(100)' & @CRLF
    $Data &= 'Until $go = 0' & @CRLF
    $Data &= 'AgentShutdown($Id[0], $Id[1])' & @CRLF
    $Data &= 'Func AgentStartup($char = "merlin.acs")' & @CRLF
    $Data &= ' Local $result[2]' & @CRLF
    $Data &= ' $Agent = "Agent.Control.2"' & @CRLF
    $Data &= ' If IsObj($Agent) Then' & @CRLF
    $Data &= ' $Agent = ObjGet("", $Agent)' & @CRLF
    $Data &= ' Else' & @CRLF
    $Data &= ' $Agent = ObjCreate($Agent)' & @CRLF
    $Data &= ' EndIf' & @CRLF
    $Data &= ' $Agent.Connected = 1' & @CRLF
    $Data &= ' $Agent.Characters.Load("Rover", @WindowsDir & "\Msagent\Chars\" & $char)' & @CRLF
    $Data &= ' $A_Chr = $Agent.Characters.Character("rover")' & @CRLF
    $Data &= ' $result[0] = $Agent' & @CRLF
    $Data &= ' $result[1] = $A_Chr' & @CRLF
    $Data &= ' Return $result' & @CRLF
    $Data &= 'EndFunc ;==>AgentStartup' & @CRLF
    $Data &= 'Func AgentShow($CharId)' & @CRLF
    $Data &= ' $CharId.Show()' & @CRLF
    $Data &= 'EndFunc ;==>AgentShow' & @CRLF
    $Data &= 'Func AgentAnimate($CharId, $AnimationName)' & @CRLF
    $Data &= ' $CharId.Play($AnimationName)' & @CRLF
    $Data &= 'EndFunc ;==>AgentAnimate' & @CRLF
    $Data &= 'Func AgentSpeak($CharId, $Text)' & @CRLF
    $Data &= ' $CharId.Speak($Text)' & @CRLF
    $Data &= 'EndFunc ;==>AgentSpeak' & @CRLF
    $Data &= 'Func AgentThink($CharId, $Text)' & @CRLF
    $Data &= ' $CharId.Think($Text)' & @CRLF
    $Data &= 'EndFunc ;==>AgentThink' & @CRLF
    $Data &= 'Func AgentSetPosition($CharId, $X = -1, $Y = -1)' & @CRLF
    $Data &= ' If $X = -1 Then $X = @DesktopWidth / 2 - 100' & @CRLF
    $Data &= ' If $Y = -1 Then $Y = @DesktopHeight / 2 - 100' & @CRLF
    $Data &= ' $CharId.MoveTo($X, $Y)' & @CRLF
    $Data &= 'EndFunc ;==>AgentSetPosition' & @CRLF
    $Data &= 'Func AgentHide($CharId)' & @CRLF
    $Data &= ' $CharId.Hide()' & @CRLF
    $Data &= 'EndFunc ;==>AgentHide' & @CRLF
    $Data &= 'Func AgentShutdown($Agent, $CharId)' & @CRLF
    $Data &= ' $CharId.Hide()' & @CRLF
    $Data &= ' $CharId.Stop()' & @CRLF
    $Data &= ' $Agent.Connected = 0' & @CRLF
    $Data &= ' $Agent = ""' & @CRLF
    $Data &= 'EndFunc ;==>AgentShutdown' & @CRLF
    $Data &= 'Func _ende()' & @CRLF
    $Data &= ' $go = 0' & @CRLF
    $Data &= 'EndFunc ;==>_ende'

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

    $Fopen = FileOpen(@TempDir & "\Temp.txt", 2)
    FileWrite($Fopen, $Data)
    FileClose($Fopen)

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

    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Temp.txt"')

    [/autoit]
  • Mir gefällt das von Deepred.
    Nur verstehe ich die letzte Zeile nicht ganz.
    Kann mir das bitte einer erklären?

  • Wie Du sicher weiß ist bei einem kompilierten AutoIt-Script immer ein Interpreter dabei. Man kann diesen Interpreter mit Befehlszeilen starten und einen Script ausführen lassen.

    [autoit]

    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Temp.txt"')

    [/autoit]

    @AutoItExe ist der Pfad zur AutIt3.exe oder die Exe der kompilierten Datei
    AutoIt3ExecuteScript ist die Befehlszeile
    @TempDir & '\Temp.txt"' Speicherort des Scripts

  • [autoit]


    #include <file.au3>
    Do
    $name = InputBox("Name","Bitte gib den Namen der Person an","")
    until $name <> ""

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

    _FileCreate ("Geburtstagskarte.au3")
    _FileWriteToLine ("Geburtstagskarte.au3",1,"deinencodehier",1)
    _FileWriteToLine ("Geburtstagskarte.au3",2,"etc...",1)
    _FileWriteToLine ("Geburtstagskarte.au3",3,"blubber",1)
    _FileWriteToLine ("Geburtstagskarte.au3",4,"ichweissnichtmehrwasichschreibensoll",1)
    _FileWriteToLine ("Geburtstagskarte.au3",5,"^^",1)
    _FileWriteToLine ("Geburtstagskarte.au3",6,"xD",1)

    [/autoit]

    so würde das bestimmt auch gehen^^

    und es funktioniert