Downloadmanager für LAN-Webserver

  • Hallo Leute!
    Ich hab mal wieder ne Frage bezüglich Autoit:
    Ich würde gerne einen "Downloadhelper/-manager" fürs LAN basteln. Ich habe mir das so vorgestellt. Jeder, der am LAN angeschlossen ist (ich denke hierbei an Lan-Partys) zieht sich das Programm dann von z.B. einem USB-Stick. Wenn man das Programm öffnet, sieht man ein GUI, mit den zum Download erhältlichen programmen/kostenlosen Spielen. Siehe Bild:
    autoit.de/wcf/attachment/3673/
    Ich wollte, dass das Programm sich die Daten für die Vorschaubilder, Beschreibung etc. von meinem lokalen Webserver aus einer INI-Datei zieht.
    Aber wofür ich jetzt euren Rat brauche: Sagen wir mal, in einer Zeile stehen 3 Spiele. Wenn ich jetzt über die INI-Datei ein 4tes Spiel hinzufüge, wird es automatisch in die nächste Zeile gesetzt und die GUI wird z.B. um 40Pixel nach unten vergrößert. Das 5te und 6te Spiel kommen in die gleiche Zeile, nur das 7te kommt in die neue dritte Zeile. Ist das irgendwie möglich?

    Einmal editiert, zuletzt von Battlestr1k3 (11. Januar 2009 um 15:10)

  • Ja, sicher.
    Ich nehme an deine INI ist so aufgebaut:

    Spoiler anzeigen

    [Spiele]
    Spiel1=Trackmania Nations Forever
    Spiel1URL=http://tmnforever.de
    Spiel2=Supertux
    usw...


    Erst findest du raus, wie viele Einträge es sind, z.B.

    Spoiler anzeigen
    [autoit]


    $anzahl=0
    $i=1
    While True
    If IniRead("ini.ini","Spiele","Spiel" & $i,"NEIN!") = "NEIN!" Then ExitLoop
    $anzahl += 1
    $i+=1
    WEnd

    [/autoit]


    Danach steht in $anzahl die Anzahl der Spiele die du hast.
    Und da drei Spiele in einer Reihe sind:

    [autoit]

    $reihen=($anzahl-mod($anzahl,3))/3

    [/autoit]


    Den Rest schaffst du selbst.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Könntest Du mir bitte das mit der Anzahl nochmal genauer erklären?
    Ich versteh leider nur einen Teil. :wacko:
    Vielen Dank! :D

  • Systematisch, Zeile für Zeile:
    1. $anzahl und ist null, $i ist eins

    [autoit]

    $anzahl=0
    $i=1

    [/autoit]


    2. Endlosschleife

    [autoit]

    While True

    [/autoit]


    3. Wenn Spiel? (?=Zahl, zuerst also 1) ="NEIN!", also0 der Stdwert, wenn nix gefunden wurde, dann Schleife beenden, die Anzahl ist bestimmt

    [autoit]

    If IniRead("ini.ini","Spiele","Spiel" & $i,"NEIN!") = "NEIN!" Then ExitLoop

    [/autoit]


    4. Erfolgreich, also $anzahl hochstellen, und auch $i (so ähnlich wie For to)

    [autoit]

    $anzahl += 1
    $i+=1
    WEnd

    [/autoit]

    Was verstehst du davon nicht?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan2142 (11. Januar 2009 um 20:21)

  • oben hast du geschrieben, dass $anzahl und $i "0" sind, aber im quelltext steht oben $i=1
    Sorry aber so ganz raff ich das nich :wacko:

  • Lies dir die Hilfe zu IniRead durch.
    In der ersten Runde ist $anzahl 0 und $i 1.
    Wenn er einen Eintrag mit den Namen Spiel1 findet, wird anzahl um eins erhöht (denn dann gibts ja eins mehr), und $i auch, für den nächsten Durchgang.
    Weiter gehts:
    Gibt es Spiel2? Wenn ja, $anzahl um eins erhöhen, usw. usf.
    Wenn NICHT, dann verlasse die Schleife, und füge nix zu $anzahl hinzu.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Was meinst du mit dem Layout? -> GUI? .. nehm einfach Koda her und bastel eine schönes GUI

    Btw. arbeite auch gerade an einem Lan-Dl-Manager, fast fertig... ;)

    mfg
    Jautois

  • ich meine das, was ich in meinem ersten Post geschrieben haben, dass immer 3 Spiele in eiener Reihe stehn, und wenn ich z.b über die INI_Datei ein 4. Spiel hinzufüge, dass das dann automatisch 20Pixel nach unten in die 2. Reihe rutscht :huh:

    hab mir die Hilfe zu Mod durchgelesen. Da steht was mit Divisor. Kann ich damit dann etwas anfangen? Weiß nich, aber wenn ja, wie? :thumbup:

    • Offizieller Beitrag

    Kleine Starthilfe:

    Spoiler anzeigen
    [autoit]


    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    $hGui = GUICreate('Test', 320, 480, -1, -1)

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

    Global $ahButton[8], $ahDescription[8]
    For $i = 0 To 7
    $ahButton[$i] = GUICtrlCreateButton('', 20 + Mod($i, 3) * 100, 10 + Int($i/3) * 100, 64, 64, $BS_ICON)
    GUICtrlSetImage(-1, 'shell32.dll', -44)
    $ahDescription[$i] = GUICtrlCreateLabel('Titel', 20 + Mod($i, 3) * 100, 80 + Int($i/3) * 100, 64, 16, $SS_CENTER)
    Next
    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • ah danke!
    ich hab mir den oberen code jetzt mal angeguckt, leider versteh ich noch nicht alles. Könntet ihr mir das noch mal erklären.
    Hier seht ihr meinen jetzigen Code:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ScrollBarConstants.au3>
    #include <IE.au3>

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

    _IEErrorHandlerRegister ()

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

    Guicreate("LANHelper",800,600,-1,-1)
    GUICtrlCreateTab(0,78,803,500)
    GUICtrlCreateTabItem("Gamez")
    $oIE = _IECreateEmbedded ()
    $GUIActiveX = GUICtrlCreateObj($oIE,-12,-20, 850,100)
    GuiSetState()
    _IENavigate ($oIE, "127.0.0.1/xampp/lan/index.html")
    While GuiGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

    [/autoit]

    Das obere (müsste bei euch weiß oder 404 Errror sein, wird nachher eine kleine Info-Page (ca. 800x100 groß)

  • Mit dem obigen Code werden einfach Buttons erstellt.

    [autoit]


    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    $hGui = GUICreate('Test', 320, 480, -1, -1) ;erstellt das Gui-Fenster

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

    Global $ahButton[8], $ahDescription[8] ;die Variablen werden definiert
    For $i = 0 To 7 ;For-Schleife läuft 8 mal durch und wiederholt jedesmal den Code zwischen For.. und Next.
    $ahButton[$i] = GUICtrlCreateButton('', 20 + Mod($i, 3) * 100, 10 + Int($i/3) * 100, 64, 64, $BS_ICON) ; ein Button wird erstellt
    GUICtrlSetImage(-1, 'shell32.dll', -44) ; der einer Zeile obentrüber erstellte Button bekommt ein Icon
    $ahDescription[$i] = GUICtrlCreateLabel('Titel', 20 + Mod($i, 3) * 100, 80 + Int($i/3) * 100, 64, 16, $SS_CENTER) ; es wird ein Label "Titel" unter dem Button erstellt
    Next
    GUISetState() ; Gui-Fenster anzeigen

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

    Do
    Until GUIGetMsg() = -3

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

    mfg
    Jautois

  • ok, jetzt versteh ichs schon besser. warum steht hinter $ahbutton und $ahdescription eine eckige klammer [8]?
    und wie kann ich dann für jeden button einen anderen titel (durch die .ini) einstellen?
    Sorry dass ich so dumm frag, aber bin halt (noch) nich so gut in AutoIt ^^

  • Also die was du als [] meinst sind Array's. Lies dir dazu am besten ein Tut. durch.

    Kurz erklärt .. die Variable $ahButton hat 8 Speicherplätze.

    Immer beginnend von 0:
    $ahButton[0]
    $ahButton[1]
    $ahButton[2]
    ...
    $ahButton[8]


    Zur 2ten Frage:
    Wenn du z.B. vorher eine Variable definierst - $ahTitle[8] und nun den Variablen die Werte zuweißt.

    [autoit]


    Global $ahTitle[8]
    $ahTitle[0] = 'Far Cry 2'
    $ahTitle[1] = 'WoW'
    $ahTitle[2] = 'CS 1.6'
    ..
    $ahTitle[8] = 'Flatout 2'

    [/autoit]

    Du kannst die Titel aus der Ini lesen und dann die Variable $ahTitle immer den String zuteilen. Folgender Codefetzen zeigt das:

    [autoit]


    $read = IniReadSection("<Filename>","Games")
    If not @error Then
    For $i = 1 To $read[0][0]
    $ahTitle[$i-1] = $read[$i][1]
    Next

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

    ;-> Schlüssel ist in $read[$i][0]
    ;-> Wert ist in $read[$i][1]

    [/autoit]

    @L3viathan2142: Kleine/Große Anmerkung-> Um die Anzahl der Ini-Einträge rauszubekommen braucht man nicht so einen code wie du hast.

    [autoit]


    $read = Inireadsection("<filename>","Spiele")

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

    ; hier bekommt man eine 2D-Array-Variable zurück, die die Anzahl der Ini-Einträge schon beeinhaltet. -> $read[0][0]

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


    mfg
    Jautois

    Einmal editiert, zuletzt von Jautois (13. Januar 2009 um 20:49)

  • ok, dann werd ich das mal probieren. Ich hätte da jetzt aber noch ma ne frage:
    Kann ich mit Autoit machen, dass wenn man auf den jeweiligen button klickt, man erst zu einer "Detailseite" kommt, die aus der INI abgelesen wird?
    Also mit Beschreibung, Versionsnummer, Autor... :S

  • Klar, erstell einfach eine 2te GUI (also Fenster) am Anfang mit den gewünschten Dingen, die du aber noch nicht anzeigen lässt. Wenn nun ein Button geklickt wird setzt du die Texte der Variablen des Fensters.. auf die Daten aus der Ini. Anschließend stellst du das Fenster auf sichtbar -> §SW_SHOW.

  • ich will euch ja echt nicht nerven, aber könnte mir jemand so ein einfaches beispiel script für die "Detailseite" basteln? ^^

  • [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Users\Johannes\Desktop\Video Konverter\Form1.kxf
    $Form1 = GUICreate("Details", 290, 352, 193, 125)
    $Pic1 = GUICtrlCreatePic("", 8, 8, 121, 100, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Spiel: ", 136, 16, 40, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Version:", 136, 40, 50, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label3 = GUICtrlCreateLabel("Author:", 136, 64, 45, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label4 = GUICtrlCreateLabel("Beschreibung:", 8, 120, 85, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("&Download", 8, 312, 169, 33, 0)
    $Button2 = GUICtrlCreateButton("&Abbrechen", 184, 312, 97, 33, 0)
    $Edit = GUICtrlCreateEdit("", 8, 144, 273, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Edit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]