.au3 Saver

  • Hi Leute

    mir war heute bzw gestern abend wieder mal langeweilig (OH GRAUS^^) und dabei hab ich das folgende Script verbrochen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    If Not FileExists("data.txt") Then
    $datei = FileOpen("data.txt", 2)
    $pfad = FileSelectFolder("Bitte den Include-Ordner suchen", @ProgramFilesDir)
    FileWrite($datei, $pfad)
    FileClose($datei)
    Else
    $datei = FileOpen("data.txt", 0)
    $pfad = FileRead($datei)
    FileClose($datei)
    EndIf
    #Region Gui
    Opt("TrayMenuMode", 1)
    Opt("TrayMenuMode", 1)
    Opt("TrayMenuMode", 1)
    $Form2 = GUICreate(".au3 Saver by Padmak", 629, 632, -1, -1)
    $Edit1 = GUICtrlCreateEdit("", 10, 30, 605, 519)
    $Label1 = GUICtrlCreateLabel("Hier den Quelltext der .au3-Datei eintragen", 10, 10, 205, 17)
    $Label2 = GUICtrlCreateLabel("Name der .au3-Datei (z.B. myau3.au3)", 10, 550, 184, 17)
    $Input1 = GUICtrlCreateInput("", 10, 570, 161, 21)
    $Button1 = GUICtrlCreateButton("Im Include-Ordner erstellen", 180, 570, 145, 25, 0)
    $Button2 = GUICtrlCreateButton("Auf Desktop speichern", 330, 570, 125, 25, 0)
    $Button3 = GUICtrlCreateButton("In beliebigem Verzeichnis abspeichern", 10, 600, 285, 25, 0)
    $Button4 = GUICtrlCreateButton("Beenden", 460, 600, 155, 25, 0)
    $Button5 = GUICtrlCreateButton("In Tray minimieren", 460, 570, 155, 25, 0)
    $Button6 = GUICtrlCreateButton("Edit-Feld löschen", 300, 600, 155, 25, 0)
    TraySetClick("9")
    $MenuItem1 = TrayCreateItem("Wiederherstellen")
    $MenuItem2 = TrayCreateItem("")
    $MenuItem3 = TrayCreateItem("Beenden")
    GUISetState(@SW_SHOW)
    #EndRegion Guid
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg ;==> Buttons usw. Switch-Schleife
    Case $GUI_EVENT_MINIMIZE
    Traytip(".au3-Saver","STRG+ALT+C drücken um aktuell markierten Text zu speichern",10)
    GUISetState(@SW_HIDE)
    HotKeySet("^!c", "clip")
    Case $GUI_EVENT_CLOSE
    Traytip(".au3-Saver","STRG+ALT+C drücken um aktuell markierten Text zu speichern",10)
    GUISetState(@SW_HIDE)
    HotKeySet("^!c", "clip")
    Case $Button1 ;==> Au3 Datei erstellen
    call("build")
    Case $Button2 ;==> Auf Desktop speichern
    $pfad = (@DesktopDir)
    call("build")
    Case $Button3 ;==> Beliebig speichern
    $pfad = FileSelectFolder("Bitte den Speicherort wählen", "")
    If @error Then
    MsgBox(0, "Fehler", "Bitte einen Ordner wählen")
    ContinueLoop
    EndIf
    call("build")
    Case $Button4 ;==> exit
    Exit
    Case $Button5 ;==> Verstecken
    Traytip(".au3-Saver","STRG+ALT+C drücken um aktuell markierten Text zu speichern",10)
    GUISetState(@SW_HIDE)
    HotKeySet("^!c", "clip")
    Case $Button6
    GUICtrlSetData($Edit1, "")
    EndSwitch

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

    $msg = TrayGetMsg()
    Select ;==> Traymenü Select-Schleife
    Case $msg = 0
    ContinueLoop
    Case $msg = $MenuItem1
    GUISetState(@SW_SHOW)
    Case $msg = $MenuItem3
    Exit
    EndSelect
    WEnd

    Func clip()
    Send("^c")
    $clip = ClipGet()
    GUICtrlSetData($Edit1, $clip)
    GUISetState(@SW_SHOW)
    EndFunc

    Func build()
    $edit = GUICtrlRead($Edit1)
    $name = GUICtrlRead($Input1)
    $splitname = StringSplit($name, ".")
    If @error = 1 Then
    MsgBox(0, "Fehler", "Bitte den Dateinamen auf die .au3-Endung überprüfen")
    Return
    EndIf
    If $edit = "" Then
    MsgBox(0, "Fehler", "Bitte etwas in das Edit-Feld eintragen")
    Return
    EndIf
    If $name = "" Then
    MsgBox(0, "Fehler", "Bitte etwas als Name eintragen")
    Return
    EndIf
    FileWrite($pfad & "\" & $name, $edit)
    MsgBox(0, "Erfolgreich", "Das Script wurde erfolgreich erstellt")
    EndFunc

    [/autoit]

    Vielleicht kann dieses Script mal wer brauchen ich habs aus reiner Faulheit geschrieben :D

    Padmak

    Edit: Update, nun hab ich den Tip von Oscar (danke nochmal) verwendet
    Bitte sagt doch ob es euch gefallen hat^^

    3 Mal editiert, zuletzt von Padmak (23. Dezember 2008 um 16:25)

    • Offizieller Beitrag

    Es wird nicht dadurch besser, dass Du nun zwei Funktionen benutzt. ;)
    Wenn Du Funktionsaufrufe als GOTO-Ersatz missbrauchst, führt das früher oder später zu einem Absturz des Scripts.
    Schau Dir mal die Schleifen-Befehle (While...WEnd und Do...Until) an.

    Und ich verstehe immer noch nicht den Sinn hinter diesem Script. Was genau soll man damit machen können?

  • das ist ja ein langeweilescript^^
    kennst du nicht das problem dass du wenn du dich hier im forum umsiehst die ganzen sachen gerne ausprobieren würdest?
    mit diesem script kann man halt einfach den kopierten quelltext einfügen und abspeichern^^
    ich denk sogar über ne erweiterung nach, dann läufts im hintergrund und man kann per tastenkombination einfach irgendeinen kopierteen text
    einfügen und automatisch speichern :D
    wenn ich mal zeit hab

    und zu dem mit den zwei funktionen:
    wie oft kann man zwei funktionen aufrufen bis es zu einem stack überlauf kommt?
    ich hab die zahl grad nich im kopf aber wenn man so oft scripte abspeichert dann kann man das script ruhig auch mal neustarten :D

    Padmak

  • was soll ich denn da anders machen?
    bzw um was zu lernen:
    was soll ich hier

    [autoit]


    $pfad = FileSelectFolder("Bitte den Include-Ordner suchen", @ProgramFilesDir)
    If @error = 1 Then
    call("main")
    EndIf

    [/autoit]


    ausser dem call("main") groß machen?
    das mit den zwei funktionen also GOTO hab ich gemacht weil ich sonst nix anderes kenn
    ich würd mich auch über was anderes freuen^^
    wie macht man das denn dass man von der build() funktion wieder zurück in die ehemalige main() funktion geht??

    Padmak

  • nimm doch

    [autoit]

    Return

    [/autoit]

    deutsch:

    Zitat von http://www.autoit.de/dokumentation_aktuell/keywords/Func.htm

    Das Schlüsselwort Return wird benutzt, um die Funktion zu verlassen. Im Gegensatz zu eingebauten Funktionen geben eigene Funktionen immer 0 zurück, wenn nichts anderes veranlasst wird.

  • Dankeschön^^
    so funktionierts

    Padmak

    Edit: Aber was mach ich dann mit dem hier:

    [autoit]


    $pfad = FileSelectFolder("Bitte den Include-Ordner suchen", @ProgramFilesDir)
    If @error = 1 Then
    call("main")
    EndIf

    [/autoit]

    irgendwie muss ich ja wieder in die hauptschleife zurück oder?
    ich könnt ein exit reihaun aber des wäre auch dumm
    und wenn ich den button rausnehm schaut die gui nicht so gut aus...

    Edit2:
    ich hab jez ne lösung gefunden, ich hau den button raus und tu dafür andere hin :D
    genaueres gibts dann wenn ich damit fertig bin

    Einmal editiert, zuletzt von Padmak (23. Dezember 2008 um 14:01)

  • aaaah danke das hab ich schon ewig gesucht :D

    endlich kann ich diesen funktions-schmarrn vergessen^^

    und ausserdem jez updated oben, alles haut^^

    Padmak

    Ps: Danke Oscar :D:D:D :rock: