Komplexes Programm mit externen Dateien und Autoupdater

  • Hi zusammen

    Ist es möglich, ein Programm zu schreiben, welches folgende Struktur hat:
    - GUI (Hauptdatei)
    - Bilderumwandler (externe Datei)
    - GUI-Funktionen (externe Datei)
    - Autoupdater (separate .exe mit Überprüfung der anderen Dateien)

    Erklärung:
    Der Bilderumwandler und die GUI-Funktionen sollen in eine extra Datei. Diese Beiden werden in der Hauptdatei, dem GUI, wieder eingebunden.
    Welches Dateiformat eignet sich am Besten für die externen Dateien und ist sowas überhaupt möglich? Wenn ja, kann ich es einfach per Include einbinden und dann starten?

    Zusätzlich soll ein Autoupdater zu einem bestimmten Zeitpunkt die externen Dateien überprüfen und mit der Update.ini auf dem Webserver vergleichen. Wenn es eine neue Version gibt, herunterladen und den Code ersetzen. Nicht das File ersetzen. Ist dies möglich? Wenn ja, mit welchen Befehlen?

    MfG
    Lukas

    Einmal editiert, zuletzt von lukiono (17. August 2012 um 10:05)

  • Soweit ich das verstanden hab möchtest du einen Code in einer anderen Programmiersprache einfach per include einfügen... Das geht auf jeden Fall nicht. Du kannst z.B. per

    [autoit]

    Run

    [/autoit]

    ein anderes Programm starten. Falls es mit AutoIt geschrieben ist, kannst du es includieren, indem du einfach eine Funktion in der Include Datei machst. Updaten geht auch, z.B. mit

    [autoit]

    INetGet

    [/autoit]

    .

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Ok, so wie ich das jetzt verstanden habe:
    Externe .au3 Files mit Include einbinden
    Updater geht nur per .au3 File

    Oder ich binde es per Run ein.
    Und die Überprüfung geht mit?

    Neue Frage: Ist es möglich einen Zeilenumbruch in einer Msgbox einzufügen?

    Funktioniert nicht:

    [autoit]

    MsgBox(1,"test" & @CRLF "test2")

    [/autoit]

    Danke für die Antworten

  • Hast ein & vergessen:

    [autoit]

    MsgBox(0,"","hello" & @CRLF & "world")

    [/autoit]

    Run bindet kein anderes Programm ein, sondern startet einfach eine .exe

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Wenn du deine 4 *.exe Datein hast kannst du ganzeinfach in das Programm mit der HauptGUI die anderen 3 mit Fileinstall einbinden. Aber so wie ich das verstehen möchtest du in eine Datei nur die Funktionen für die Haupt Gui packen und diese dann abrufen? Wenn ja dann kannst du befor du das Programm mit der Haupt Gui compilierst die Gui Funktionen.au3 per #include einbinden wie meine vorposter schon erklärt haben :D

  • Vielen Dank für die Hilfe.

    Was ich nicht kapiere ist, wenn man auf den Button Abbrechen klickt, soll sich das Programm schliessen. Wie stell ich das an?

    [autoit]

    $abbrechen = GUICtrlCreateButton("Abbrechen", 328, 368, 105, 33, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetCursor (-1, 0)

    [/autoit]
  • [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 413, 298, 302, 218)
    $Button1 = GUICtrlCreateButton("Abbrechen", 136, 104, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Danke dir vielmals.

    Wenn ich wieder Fragen habe zu meinem Programm stelle ich sie hier oder direkt an dich :P

  • Und da iser wieder :D

    Wie kann ich da denn jetzt noch eine Msgbox hinzufügen mit: Wilsch du dies Programm wirklich kanceln? :D

  • Und da kommt auch direkt die Antwort ^^:

    [autoit]

    $msgb = MsgBox(4,"!","Wollen sie wirklich beenden?")
    If $msgb = 6 Then Exit

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Du bist echt der Hammer. :)
    Mit den Fileget Befehlen kann ich etwas aus dem Internet laden oder?
    Ist dann auch ein temporärer Ordner mit der Update.ini möglich oder muss ich da eine andere Dateiendung nehmen?

    Und kann man bei einem Bild welches man ausgewählt hat, die Qualität und Grösse ändern?
    Und wenn ja, wie lege ich die Qualität fest?

    Mehr Fragen habe ich derzeit nicht. Wenns zuviele werden einfach meckern :D

  • Ich mach das immer so:

    [autoit]

    If DirGetSize(@TempDir & "\meinprogramm") = -1 Then DirCreate(@TempDir & "\meinprogramm")
    InetGet("http://cartan.ca.ohost.de/Update.ini",@TempDir & "/meinprogramm/Update.ini")
    $version = IniRead(@TempDir & "/meinprogramm/Update.ini","Update","Version","Fehler")
    MsgBox(0,"Version",$version)
    ;~ DirRemove(@TempDir & "/meinprogramm",1)

    [/autoit]

    (Das Beispielscript klappt auch bei dir)

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Ja, ich wieder :whistling:

    Habe ein kleines Problem. Besser gesagt ein Problem und eine Unwissenheit. Nach hin und her suchen in der deutschen Hilfe, frage ich mal:

    Ich möchte per Button($update) den Updater starten.
    Jedoch gibt er mir nicht mal eine Messagebox aus nach folgendem Code:

    Spoiler anzeigen
    [autoit]

    While 1
    $nMsg2 = GUIGetMsg()
    Switch $nMsg2
    Case $update
    Exit
    Case $update
    $msgb2 = MsgBox(4+32,"Update","Möchten Sie überprüfen ob eine aktuellere Version zur Verfügung steht?")
    If $msgb2 = 6 Then Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Zusätzlich möchte ich autoupdater.exe einbinden. Jedoch kennt die If Anweisung den Befehl Run nicht :D
    Wie kann ich dieses verwirklichen?

  • Das kann auch nicht klappen du hast zwei Cases mit der gleichen Variable. Wahrscheinlich sollte es so funzen.

    [autoit]

    While 1
    $nMsg2 = GUIGetMsg()
    Switch $nMsg2
    Case $GUI_EVENT_CLOSE
    Exit
    Case $update
    $msgb2 = MsgBox(4+32,"Update","Möchten Sie überprüfen ob eine aktuellere Version zur Verfügung steht?")
    If $msgb2 = 6 Then Exit
    EndSwitch
    WEnd

    [/autoit]


    Und das mit Run so.

    [autoit]

    While 1
    $nMsg2 = GUIGetMsg()
    Switch $nMsg2
    Case $GUI_EVENT_CLOSE
    Exit
    Case $update
    $msgb2 = MsgBox(4+32,"Update","Möchten Sie überprüfen ob eine aktuellere Version zur Verfügung steht?")
    If $msgb2 = 6 Then Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE) ; Hier kommt deine .exe hin
    If $msgb2 = 7 Then Exit ; Du willst wahrscheinlich mit Nein antworten wenn du kein Update machen willst, also kommt da eine 7 hin
    EndSwitch
    WEnd

    [/autoit]
  • Hm, hat nicht funktioniert.

    Den Fehler find ich aber auch nicht grade. bin noch am Suchen

    Button $update

    [autoit]

    $update = GUICtrlCreateButton("Update", 256, 408, 113, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)

    [/autoit]
  • Hier ;)

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=Beta
    #AutoIt3Wrapper_icon=..\..\Downloads\lightning-sign.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs
    Autor: Lukas Krähenbühl (lukiono)
    Programm: Bildumwandler
    Version: 1.1 Alpha 1
    Lizenz: ?
    #ce
    #Include <GDIPlus.au3>
    #Include <Misc.au3>

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

    ;Überprüfung Instanzaktivität
    if _Singleton("Bildumwandler",1) = 0 Then
    Msgbox(16+0+262144,"Warnung","Derzeit ist dieses Programm nicht stabil genug, um mehrere Instanzen aktiv zu halten!"&@CRLF&"Wenn Sie diesen Dialog sehen, besitzen Sie eine Betaversion."&@CRLF&"Mit der kommenden stabilen Version wird die Stabilität sichergestellt sein."&@CRLF&"Danke für Ihr Verständnis")
    Exit
    EndIf

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

    ;Starten der GDI Datenbank
    _GDIPlus_Startup()

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

    ;GUI Beginn
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=koda_gui.kxf
    $Form1_1 = GUICreate("BMP Umwandler", 625, 443, -1, -1)
    GUISetFont(12, 400, 0, "Arial Narrow")
    GUISetBkColor(0xC8C8C8)
    $bildvorschau = GUICtrlCreatePic("C:\Users\lukiono\Pictures\RCT3\Shot0000.bmp", 8, 8, 281, 209, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 7)
    $prozessbar = GUICtrlCreateProgress(8, 336, 609, 25)
    GUICtrlSetColor(-1, 0x0000FF)
    $Zielverzeichnis = GUICtrlCreateLabel("Zielverzeichnis", 16, 240, 93, 24)
    GUICtrlSetColor(-1, 0x000000)
    $formatliste = GUICtrlCreateList("", 488, 64, 65, 146)
    GUICtrlSetColor(-1, 0x000000)
    GUICtrlSetCursor (-1, 7)
    $update = GUICtrlCreateButton("Update", 256, 408, 113, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    $bilderliste = GUICtrlCreateList("", 296, 8, 185, 206)
    GUICtrlSetColor(-1, 0x000000)
    $auswahl_ziel = GUICtrlCreateButton("Auswählen", 472, 240, 105, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    $zielordner = GUICtrlCreateList("", 120, 240, 345, 26)
    GUICtrlSetColor(-1, 0x000000)
    $Button1 = GUICtrlCreateButton("Umwandeln", 176, 376, 137, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    $Button2 = GUICtrlCreateButton("Auswählen", 488, 32, 121, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    $beenden = GUICtrlCreateButton("Beenden", 320, 376, 137, 25, $WS_GROUP)
    GUICtrlSetColor(-1, 0x000000)
    $Label1 = GUICtrlCreateLabel("Bilder", 528, 8, 39, 24)
    GUICtrlSetColor(-1, 0x000000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;GUI Ende

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

    ;Programm beenden
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $beenden
    $msgb = MsgBox(4,"Beenden","Wollen Sie wirklich beenden?")
    If $msgb = 6 Then Exit

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

    EndSwitch
    WEnd

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

    ;Autoupdater starten
    While 1
    $nMsg2 = GUIGetMsg()
    Switch $nMsg2
    Case $GUI_EVENT_CLOSE
    Exit
    Case $update
    $msgb2 = MsgBox(4+32,"Update","Möchten Sie überprüfen ob eine aktuellere Version zur Verfügung steht?")
    If $msgb2 = 6 Then Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE) ; Hier kommt deine .exe hin
    If $msgb2 = 7 Then Exit ; Du willst wahrscheinlich mit Nein antworten wenn du kein Update machen willst, also kommt da eine 7 hin
    EndSwitch
    WEnd

    [/autoit]