Das Ultimative Programmstartetool ^^

  • Hallo liebe liebenden (oder die die es werden wollen),

    ich brauche mal wieder eure Hilfe/Inspiration. Ich will diesmal was für den Heimgebrauch basteln. Ein Gui indem ich durch eine einfache "Durchsuchen" funktion eine beliebige EXE Datei zu einem Programm oder einem Spiel auswählen kann und diese dann in das Haupt-GUI mit Icon und Namen übernommen wird und gespeichert (soll also wenn ich das Programm schließe und wieder aufmache noch da sein). Mein Hauptproblem besteht jetzt dadrin das ich nicht weiß was eine "elegante" Methode wäre um die Daten abzuspeichern. Also lasst doch mal bitte eure Vorschläge hören.
    Vielen Dank schonmal ^^


    MfG

    akira2012

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Ähm dein Beitrag verwirrt mich.

    Also du meinst:
    Ich klicke 'Durchsuchen', wähle meine Exe-Datei aus.
    Dann erstellt sich ein Button der das icon von dem Programm/Spiel hat und wenn ich auf den Button klicke soll das Programm/Spiel gestartet werden?

  • Ich denke mal da arbeitest du am besten mit einer .ini Datei. -> IniRead & IniWrite.

    gruß

    • Offizieller Beitrag

    Hallo

    So ich hab dir einfach mal ein skript gemacht :) wenn du fragen zu dem skript hast (wie irgendwas funktioniert) dann frag mich einfach ;)

    Hier nun das Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <string.au3>
    Opt("GuiOnEventMode", 1)

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

    Global $msg = 0, $buttons[1][2], $left = 10, $top = 40

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

    GUICreate("Spiele..", 195, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $search = GUICtrlCreateButton(">>> Spiel auswählen <<<", 10, 10, 175, 25)
    GUICtrlSetOnEvent(-1, "_search")
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _button()
    Local $found = False
    For $i = 1 To UBound($buttons,1)-1
    If $buttons[$i][0] = @GUI_CtrlId Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return MsgBox(0,"","")
    Run($buttons[$i][1])
    EndFunc

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


    Func _search()
    If UBound($buttons, 1) = 9 Then Return MsgBox(48, "", "Es wurde die Maximale anzahl an Buttons erreicht!")
    ReDim $buttons[UBound($buttons) + 1][2]
    $fileop = FileOpenDialog("Exe auswählen...", "", "EXE Dateien(*.exe)")
    If @error Then Return
    $buttons[UBound($buttons) - 1][0] = GUICtrlCreateButton("", $left, $top, 85, 85, $BS_ICON)
    GUICtrlSetTip(-1,_StringProper(StringTrimRight(StringTrimLeft($fileop,StringInStr($fileop,"\",-1,-1)),4)))
    GUICtrlSetImage(-1, $fileop, 0)
    GUICtrlSetOnEvent(-1,"_button")
    $buttons[UBound($buttons) - 1][1] = $fileop
    If $left = 10 Then
    $left = 100
    Else
    $top += 90
    $left = 10
    EndIf
    EndFunc ;==>_search

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

    Func _exit ()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Hoffe konnte helfen..

    Mfg Spdíder

  • Zitat

    Original von gtaspider
    Hallo

    So ich hab dir einfach mal ein skript gemacht :) wenn du fragen zu dem skript hast (wie irgendwas funktioniert) dann frag mich einfach ;)


    Hoffe konnte helfen..

    Mfg Spdíder


    ....

    bin beeindruckt ^^ Echt nicht schlecht werde das ganze mal studieren und ausbauen und dann wieder hier einstellen. Die Speicherfunktion fehlt ja immerhin noch ^^. Vielen dank echt saubere arbeit!!

    MfG

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <string.au3>
    Opt("GuiOnEventMode", 1)

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

    Global $msg = 0, $buttons[1][2], $left = 10, $top = 40

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

    GUICreate("Spiele..", 195, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $search = GUICtrlCreateButton(">>> Spiel auswählen <<<", 10, 10, 175, 25)
    GUICtrlSetOnEvent(-1, "_search")
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _button()
    Local $found = False
    For $i = 1 To UBound($buttons,1)-1
    If $buttons[$i][0] = @GUI_CtrlId Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return MsgBox(0,"","")
    Run($buttons[$i][1])
    EndFunc

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


    Func _search()
    If UBound($buttons, 1) = 9 Then Return MsgBox(48, "", "Es wurde die Maximale anzahl an Buttons erreicht!")
    ReDim $buttons[UBound($buttons) + 1][2]
    $fileop = FileOpenDialog("Exe auswählen...", "", "EXE Dateien(*.exe)")
    If @error Then Return
    $buttons[UBound($buttons) - 1][0] = GUICtrlCreateButton("", $left, $top, 85, 85, $BS_ICON)
    GUICtrlSetTip(-1,_StringProper(StringTrimRight(StringTrimLeft($fileop,StringInStr($fileop,"\",-1,-1)),4)))
    GUICtrlSetImage(-1, $fileop, 0)
    GUICtrlSetOnEvent(-1,"_button")
    $buttons[UBound($buttons) - 1][1] = $fileop
    If $left = 10 Then
    $left = 100
    Else
    $top += 90
    $left = 10
    EndIf
    EndFunc ;==>_search

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

    Func _exit ()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    So habe mir das jetzt alles mal angeschaut und gemerkt das ich mit FAST nichts von dem was du da verwendest bis jetzt gearbeitet habe ^^. Die genaue Funktion des Befehls UBound versteh ich irgendwie nicht. In der Erklärung steht das man damit Arrays auswerten kann aber HEH? Ich steig noch nicht so recht durch. Werde mich noch einige male durchforsten aber ein paar comments wären nett ^^
    MfG

    Marko

    P.S. Ich wünschte ich hätte dein Vertrauen in mich xD

    Edit GtaSpider: habe mal Spoiler ( [SPOILER ][/SPOILER ] ,ohne leerzeichen) hinzugefügt. Bin ein Scroll hasser ;)

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    • Offizieller Beitrag

    Hi,

    Ubound liefert die Größe eines Arrays zurück. Ich würde das mit HooverButtons machen. Habe ich mal im Eng Forum gesehen. Du hinterlegst Bilder der Spiele und wenn du mit der Maus drüberfährst, dann wird eines anderes Bild angezeigt. Das sah sehr geil aus.

    So long,

    Mega

    • Offizieller Beitrag

    Hallo!

    Hab mal fast jede zeile kommentiert..

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>;Included GUIConstants.au3
    #include <string.au3>;Included string.au3

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

    Opt("GuiOnEventMode", 1);Setzt GUIOneventmode auf 1 (Gui[CTRL]SetOnEvent)

    Global $msg = 0, $buttons[1][2], $left = 10, $top = 40;Hier werden die globals eingerichtet

    GUICreate("Spiele..", 195, 400);Hier wird das Fenster (die GUI) erstellt
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit");Und wenn auf das X oben rechts geklickt wird (die GUI geschlossen wird) dann wird das skript beendet

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

    $search = GUICtrlCreateButton(">>> Spiel auswählen <<<", 10, 10, 175, 25);Hier wird der Spiele auswählen button erstellt
    GUICtrlSetOnEvent(-1, "_search");und wenn man auf den button klickt wird die funktion _search ausgeführt
    GUISetState();hier wird die gui gezeigt

    While 1;unendliche schleife damit sich das skript nicht einfach beendet
    Sleep(100)
    WEnd

    Func _button();Falls IRGENDEINER der buttons die erstellt wurden gedrückt wurden
    Local $found = False;Am anfang wird found auf False gestellt
    For $i = 1 To UBound($buttons,1)-1; Von 1 zu (wie groß das Array ist)-1 (das -1 weil es sonst ein zuviel währe da arrays bei 0 ($array[0]) anfangen und nich bei 1
    If $buttons[$i][0] = @GUI_CtrlId Then;Wenn das button array irgendwo = das letze gedrückte control ist dann...
    $found = True;....setze $found auf True...
    ExitLoop;....und beende die For schleife
    EndIf
    Next
    If Not $found Then Return 0; wenn nicht gefunden wurde (irgendein fehler..) dann abbrechen (Return)
    Run($buttons[$i][1]);Ansonsten die zum button gehörige exe starten
    EndFunc


    Func _search()
    If UBound($buttons, 1) = 9 Then Return MsgBox(48, "", "Es wurde die Maximale anzahl an Buttons erreicht!");Falls 8 buttons existieren Abbrechen
    ReDim $buttons[UBound($buttons) + 1][2];Hier wird das array neu "GeDimmt" also das array bekommt 1 mehr damit autoit später nich abkackt..
    $fileop = FileOpenDialog("Exe auswählen...", "", "EXE Dateien(*.exe)");Hier der FileOpen Dialog
    If @error Then Return;Wenn abbrechen oder schließen gedrückt wurde einfach aus der funktion gehen (Return)

    ;Hier wird der Button erstellt... $buttons[(So viel wie das array hat)-1][0]
    ;die [0] steht für die Control ID, wird bei der _button funktion gebraucht...
    $buttons[UBound($buttons) - 1][0] = GUICtrlCreateButton("", $left, $top, 85, 85, $BS_ICON)
    GUICtrlSetTip(-1,_StringProper(StringTrimRight(StringTrimLeft($fileop,StringInStr($fileop,"\",-1,-1)),4)));Setze ein Tooltip mit dem Namen der datei auf den button (wenn man mit der maus rüber geht sieht man ihn)
    GUICtrlSetImage(-1, $fileop, 0);Setze das icon der EXE datei auf den button
    GUICtrlSetOnEvent(-1,"_button");falls der button gedrückt wurde wird _button gestartet
    $buttons[UBound($buttons) - 1][1] = $fileop;$buttons[(So viel wie das array hat)-1][1] die [1] für den kompletten pfad der EXE
    ;hier wird die position festgelegt, damit die buttons nich immer übernander gehen...
    If $left = 10 Then
    $left = 100
    Else
    $top += 90
    $left = 10
    EndIf
    EndFunc ;==>_search

    Func _exit ();falls halt die gui geschlossen wird
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Mfg Spider

    Edit wohu^^ 888 Posts :party4:

  • Hast du die richtige AutoIT Version? Und auch alles 1 zu 1 kopiert? Also einen Iconlauncher ist da nirgens im Programm zu finden. Ansonsten warte bis Morgen dann stelle ich meine überarbeitete Version online.


    MfG

    akira2012

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Ja hab alles 1 zu 1 kopiert. Iconlauncher.exe so hab ich das ding halt bei mir genannt. ;)
    Hab die Version 3.2.2.0 und die 3.2.3.5 Beta installiert.

  • Also im Array wurde der richtige Pfad angezeigt. Ich habe jetzt das Run...
    durche in ShellExecute ausgetauscht. Nun funktioniert es onewallfree.

  • Ja es lag am Pfad. Der Fehler tritt auf wenn der Pfad ein Leerzeichen enthält.
    Anführungszeichen oder wie schon gesagt Shellexecute beheben das Problem.

    [autoit]

    $buttons[$i][1] = '"' & $buttons[$i][1] & '"'

    [/autoit]
  • Also öhm ich habe schon geschafft das die Buttons "gespeichert" werden (falls man das so nennen kann). Allerdings habe ich ein Problem beim ausführen der Datei und deiner _buttons function. Die Aus der Datei ausgelesenen Buttons haben natürlich keine CTRLID oder besser gesagt die ist logischerweise nicht in $buttons[$i][0] gespeichert. Wie komme ich an die ctrlid und weise Sie den erstellten Buttons zu so das ich die richtigen ausführen kann. Hier erstmal mein wischiwaschiscript ^^. Ich hoffe du / ihr bekommt keine Kopfschmerzen beim dem Versuch meine Wirren gedankengänge als AutoITNub zu verstehen...

    [autoit]


    #include <GUIConstants.au3>
    #include <string.au3>
    #include <array.au3>
    #include <File.au3>

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

    Opt("GuiOnEventMode", 1)

    Global $msg = 0, $buttons[1][2], $left = 10, $top = 40, $liste[16][2], $test[16]

    GUICreate("Spiele..", 375, 420)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $search = GUICtrlCreateButton(">>> Programm auswählen <<<", 10, 10, 355, 25)
    GUICtrlSetOnEvent(-1, "_search")
    GUISetState()
    FileOpen(@ScriptDir &"\inhalt.txt", 1)
    _FileReadToArray(@ScriptDir &"\inhalt.txt", $liste)
    _ArrayDisplay($liste, "")

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

    For $i = 1 to ($liste[0]-1)
    GUICtrlCreateButton($liste[$i], $left, $top, 85, 85, $BS_ICON)
    ;_ArrayDisplay($test, "")
    GUICtrlSetImage(-1, $liste[$i], 0)
    GUICtrlSetTip(-1,_StringProper(StringTrimRight(StringTrimLeft($liste[$i],StringInStr($liste[$i],"\",-1,-1)),4)))
    GUICtrlSetOnEvent(-1,"_button")
    If $left = 10 Then
    $left = 100
    ElseIf $left = 100 Then
    $left = 190
    ElseIf $left = 190 Then
    $left = 280
    Else
    $top += 90
    $left = 10
    EndIf
    Next

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

    While 1

    Sleep(100)
    WEnd

    Func _button()
    Local $found = False

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

    For $i = 1 To $liste[0]-1
    If $liste[$i][0] = @GUI_CtrlId Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return MsgBox(0,"FEHLER!!","Programm nicht gefunden!")
    _FileWriteFromArray(@Scriptdir & "\inhalt.txt", $buttons)
    Run($liste[$i][1])
    EndFunc


    Func _search()
    If UBound($buttons, 1) = 17 Then Return MsgBox(48, "", "Es wurde die Maximale anzahl an Buttons erreicht!")
    ReDim $buttons[UBound($buttons) + 1][2]
    $fileop = FileOpenDialog("Exe auswählen...", "", "EXE Dateien(*.exe)")
    If @error Then Return
    $buttons[UBound($buttons) - 1][0] = GUICtrlCreateButton("", $left, $top, 85, 85, $BS_ICON)
    FileWriteLine(@ScriptDir &"\inhalt.txt", $fileop)
    GUICtrlSetTip(-1,_StringProper(StringTrimRight(StringTrimLeft($fileop,StringInStr($fileop,"\",-1,-1)),4)))
    GUICtrlSetImage(-1, $fileop, 0)
    GUICtrlSetOnEvent(-1,"_button")
    $buttons[UBound($buttons) - 1][1] = $fileop
    If $left = 10 Then
    $left = 100
    ElseIf $left = 100 Then
    $left = 190
    ElseIf $left = 190 Then
    $left = 280
    Else
    $top += 90
    $left = 10
    EndIf

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

    ;
    ;_ArrayDisplay($Liste, "")
    EndFunc ;==>_search

    Func _exit ()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    • Offizieller Beitrag

    Hallo!

    so, mal aufdie schnelle:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <string.au3>
    #include <array.au3>
    #include <File.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $msg = 0, $buttons[1][2], $left = 10, $top = 40, $liste[16][2], $test[16]

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

    GUICreate("Spiele..", 375, 420)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $search = GUICtrlCreateButton(">>> Programm auswählen <<<", 10, 10, 355, 25)
    GUICtrlSetOnEvent(-1, "_search")
    GUISetState()
    FileOpen(@ScriptDir & "\inhalt.txt", 1)
    _FileReadToArray(@ScriptDir & "\inhalt.txt", $liste)

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

    For $i = 1 To ($liste[0] - 1)
    ReDim $buttons[$i + 1][2]
    $buttons[$i][0] = GUICtrlCreateButton($liste[$i], $left, $top, 85, 85, $BS_ICON)
    $buttons[$i][1] = $liste[$i]
    GUICtrlSetImage(-1, $liste[$i], 0)
    GUICtrlSetTip(-1, _StringProper(StringTrimRight(StringTrimLeft($liste[$i], StringInStr($liste[$i], "\", -1, -1)), 4)))
    GUICtrlSetOnEvent(-1, "_button")
    If $left = 10 Then
    $left = 100
    ElseIf $left = 100 Then
    $left = 190
    ElseIf $left = 190 Then
    $left = 280
    Else
    $top += 90
    $left = 10
    EndIf
    Next

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

    While 1

    Sleep(100)
    WEnd

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

    Func _button()
    Local $found = False

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

    For $i = 1 To UBound($buttons) - 1
    If $buttons[$i][0] = @GUI_CtrlId Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return MsgBox(0, "FEHLER!!", "Programm nicht gefunden!")
    Run($buttons[$i][1])
    EndFunc ;==>_button

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

    Func _search()
    If UBound($buttons, 1) = 17 Then Return MsgBox(48, "", "Es wurde die Maximale anzahl an Buttons erreicht!")
    ReDim $buttons[UBound($buttons) + 1][2]
    $fileop = FileOpenDialog("Exe auswählen...", "", "EXE Dateien(*.exe)")
    If @error Then Return
    $buttons[UBound($buttons) - 1][0] = GUICtrlCreateButton("", $left, $top, 85, 85, $BS_ICON)
    FileWriteLine(@ScriptDir & "\inhalt.txt", $fileop)
    GUICtrlSetTip(-1, _StringProper(StringTrimRight(StringTrimLeft($fileop, StringInStr($fileop, "\", -1, -1)), 4)))
    GUICtrlSetImage(-1, $fileop, 0)
    GUICtrlSetOnEvent(-1, "_button")
    $buttons[UBound($buttons) - 1][1] = $fileop
    If $left = 10 Then
    $left = 100
    ElseIf $left = 100 Then
    $left = 190
    ElseIf $left = 190 Then
    $left = 280
    Else
    $top += 90
    $left = 10
    EndIf

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

    ;
    ;_ArrayDisplay($Liste, "")
    EndFunc ;==>_search

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Mfg Spider