Create Shortcut!!

  • Hi,
    ich hoffe mal mir kann jemand weiterhelfen!

    Das Script (siehe Anhang) ;) soll alle Daten die in meinem Scriptordner hinterlegt sind, bei Aktivierung des Scripts in einen "Default"-Ordner kopieren. Vom Grundprinzip her ist alles klar. Der Neue Ordner wird am richtigen Pfad erstellt und meine Dateien werden auch kopiert. Allerdings werden die Dateien in den flaschen Ordner kopiert. Sobald ich das Script ausführe wird automatisch in dem Scriptordner ein neuer Ordner, der "3" heißt erstellt und kopiert die Daten dahin. Der Ordner in meinem angegebenen Pfad bleibt allerdings leer. Ich vermute mal, das der Fehler beim Punkt SetData liegt, aber was genau ist falsch?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    $Window = GUICreate("testprg", 476, 66, 3, 4)
    $Location = GUICtrlCreateInput("C:\test\test", 8, 16, 257, 21)
    $Loc = GUICtrlCreateButton("pfad", 272, 16, 97, 25, 0)
    $Inst = GUICtrlCreateButton("Installieren", 376, 16, 89, 25, 0)
    $Verkn = GuiCtrlCreateCheckbox("Verknüpfung Desktop",8,40,290,30)
    GuiCtrlCreateProgress(335, 50, 127, 13)
    GuiCtrlSetData(-1, 0)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Loc
    $var = FileSelectFolder("pfad angeben", "", -1, @ProgramFilesDir & "\test")
    GUICtrlSetData($Location, $var)
    Case $Verkn
    FileCreateShortcut("", @DesktopDir & "test")
    Case $Inst

    DirCreate($Location)
    FileCopy(@ScriptDir & "\" & "MAIN.au3", $Location, 1)

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


    EndSwitch
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von KriZza (9. Oktober 2008 um 17:34)

  • Genial Danke!!
    Aber ich brauche nochmal kurz hilfe :(
    Ich versuche jetzt schon irgendwie verzweifelt eine Verknüpfung zu meinem "Variabelen Pfad" zu erstellen aber das klappt irgendwie alles nicht.
    Also ich bin auch schon soweit auf den Trichter gekommen wo der Fehler ist ;) (siehe Fragezeichen) allerdings habe ich schon alle möglichen Variationen ausprobiert. Mehr fehlt wahrscheinlich wieder eine Funktion. Kann mir jemand weiterhelfen?

    Spoiler anzeigen
    [autoit]


    Case $Locate
    $var = FileSelectFolder("Bitte Installationspfad angeben", "", -1, @ProgramFilesDir & "\TestOrdner")
    GUICtrlSetData($Location, $var)
    Case $Verkn
    FileCreateShortcut("??????", @DesktopDir & "Verknüfung.lnk")

    [/autoit]
  • Der Fehler liegt an einem fehlenden BackSlash vorm Ziel-Link, da das Macro "@DesktopDir" keinen abschließenden "\" mitbringt !

    Es muss so lauten:

    Spoiler anzeigen
    [autoit]

    FileCreateShortcut($var, @DesktopDir & "\Verknüpfung.lnk")

    [/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"

  • Ja genau, den Fehler habe ich auch schon gefunden. Aber es passt immernoch nicht. Die Daten werden kopiert und ein Screenshot wird erstellt.

    Allerdings klappt der Befehl: GUICtrlSetState($Verkn, $GUI_CHECKED) nicht. Die Checkbox ist zwar aktiv, aber der Status wird nicht erkannt. Erst wenn ich die Checkbox manuell aktiviere. >> Woran liegt das ?

    Und meine zweites Problem besteht darin, dass der Pfad von der Verkünpfung nicht stimmt. Unter den Eigenschaften der Verknüpfung steht >> C:\80\main.au3, also meine $Location wird nicht erkannt :(. Wo liegt da mein Fehler???

    Gruß,
    KriZza

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    Global $i = 0

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

    #NoTrayIcon

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

    $Window = GUICreate("test Programm", 476, 66, @DesktopHeight / 2.5, @DesktopWidth / 4)
    $Location = GUICtrlCreateInput("C:\Programme\test", 8, 16, 257, 21)
    $Locate = GUICtrlCreateButton("Installationspfad", 272, 16, 97, 25, 0)
    $Install = GUICtrlCreateButton("Installieren", 376, 16, 89, 25, 0)
    $Verkn = GuiCtrlCreateCheckbox("Verknüpfung auf dem Desktop erstellen (empfohlen)",8,40,290,30)
    $Progress1 = GuiCtrlCreateProgress(335, 50, 127, 13)
    GuiCtrlSetData(-1, $i)

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

    GUICtrlSetState($Verkn, $GUI_CHECKED)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Locate
    $var = FileSelectFolder("Bitte Installationspfad angeben", "", -1, @ProgramFilesDir & "\test")
    GUICtrlSetData($Location, $var)

    Case $Verkn
    $test = GUICtrlGetState($Location)
    If GUICtrlRead($Verkn) = 1 Then
    FileCreateShortcut($test & "\main.au3",@DesktopDir & "\test.lnk")
    EndIf
    Case $Install

    DirCreate(GUICtrlRead($Location))
    DirCopy(@ScriptDir, GUICtrlRead($Location),1)
    FileCopy(@ScriptDir & "\" & "Addons" & "\" & "test.exe", @SystemDir, 1)
    $wait = 20
    GUICtrlSetData($progress1, $i)
    Sleep($wait)

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

    For $i = 0 To 100
    $MSG = GUIGetMsg()
    GUICtrlSetData($PROGRESS1, $i)
    sleep($wait)
    Next
    $confirm = MsgBox(0, "Installation abgeschlossen", "Die Installation ist fertiggestellt")
    If $confirm = 6 Then ; Checked "ja"
    EndIf
    Exit

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




    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Das mit dem $Location ist meiner Meinung nach einfach: Es muss GUICtrlRead und nicht GUICtrlGetState bei einem Input-Feld in Zeile 35 heißen.

    Zu dem $GUI_CHECKED-Problem, kann ich zur Zeit auch nichts sagen, in einem meiner Scripte habe ich gerade nachgesehen und dort funktioniert es nach anscheinend gleicher Methode. Jedenfalls sehe ich erstmal keinen Unterschied.

    Edit: Hab doch den Unterschied: Muss GUICtrlRead statt GUICtrlGetState heißen. Aber die folgenden Zeilen müssen natürlich unter "Case $Install" und nicht unter "Case $Verkn". Sonst legt er den Link nicht bei der Installation, sondern beim wählen der Option an. Unter "Case $Verkn" muss eigentlich nix !
    Hier die Zeilen:

    Spoiler anzeigen
    [autoit]

    If GUICtrlRead($Verkn) = $GUI_CHECKED Then
    FileCreateShortcut($test & "\main.au3",@DesktopDir & "\test.lnk")
    EndIf

    [/autoit]

    Insgesamt sollte es etwa so aussehen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    Global $i = 0

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

    #NoTrayIcon

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

    $Window = GUICreate("test Programm", 476, 66, @DesktopHeight / 2.5, @DesktopWidth / 4)
    $Location = GUICtrlCreateInput("C:\Programme\test", 8, 16, 257, 21)
    $Locate = GUICtrlCreateButton("Installationspfad", 272, 16, 97, 25, 0)
    $Install = GUICtrlCreateButton("Installieren", 376, 16, 89, 25, 0)
    $Verkn = GuiCtrlCreateCheckbox("Verknüpfung auf dem Desktop erstellen (empfohlen)",8,40,290,30)
    $Progress1 = GuiCtrlCreateProgress(335, 50, 127, 13)
    GuiCtrlSetData(-1, $i)

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

    GUICtrlSetState($Verkn, $GUI_CHECKED)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Locate
    $var = FileSelectFolder("Bitte Installationspfad angeben", "", -1, @ProgramFilesDir & "\test")
    GUICtrlSetData($Location, $var)


    Case $Verkn
    ; hier passiert nix, der Haken geht automatisch

    Case $Install

    DirCreate(GUICtrlRead($Location))
    DirCopy(@ScriptDir, GUICtrlRead($Location),1)
    FileCopy(@ScriptDir & "\" & "Addons" & "\" & "test.exe", @SystemDir, 1)
    $wait = 20
    GUICtrlSetData($progress1, $i)
    Sleep($wait)

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

    For $i = 0 To 100
    $MSG = GUIGetMsg()
    GUICtrlSetData($PROGRESS1, $i)
    sleep($wait)
    Next
    $confirm = MsgBox(0, "Installation abgeschlossen", "Die Installation ist fertiggestellt")
    If $confirm = 1 Then ; Checked "ok" !! Msgbox mit Ok und auf Ja abfragen haut nicht hin !!
    ; Hier wird der Link erzeugt, wenn angewählt
    $test = GUICtrlRead($Location)
    If GUICtrlRead($Verkn) = $GUI_CHECKED Then
    FileCreateShortcut($test & "\main.au3",@DesktopDir & "\test.lnk")
    EndIf
    EndIf
    Exit

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




    EndSwitch
    WEnd

    [/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"

    4 Mal editiert, zuletzt von Micha_he (9. Oktober 2008 um 16:19)