Shellexecute und _FileListToArray Problem

  • Hi Xeno!

    Vielen Dank!
    Das aktuelle Script ist wohl das:


    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <File.au3>
    #Include <Array.au3>

    Opt("GUIOnEventMode", 1)
    $Gui1 = GUICreate("Stockwerk", "701", "661")
    GUISetOnEvent($GUI_EVENT_CLOSE, "Exit2")
    GUICtrlCreateButton("Obergeschoss 1", "50", "50")
    GUICtrlSetOnEvent(-1, "Og1")
    GUICtrlCreateButton("Obergeschoss 2", "50", "150")
    GUICtrlSetOnEvent(-1, "Og2")
    GUICtrlCreateButton("Obergeschoss 3", "50", "250")
    GUICtrlSetOnEvent(-1, "Og3")
    GUICtrlCreateButton("Obergeschoss 4", "50", "350")
    GUICtrlSetOnEvent(-1, "Og4")
    GUICtrlCreateButton("Obergeschoss 5", "50", "450")
    GUICtrlSetOnEvent(-1, "Og5")
    GUICtrlCreateButton("Obergeschoss 6", "50", "550")
    GUICtrlSetOnEvent(-1, "Og6")
    $Exit = GUICtrlCreateMenu("Beenden")
    GUICtrlCreateMenuitem("Exit", $Exit)
    GUICtrlSetOnEvent(-1, "ExitMenu")
    GUISetState(@SW_SHOW, $Gui1)
    $msgn = "ERROR!"
    $n = "ERROR!"
    $ort = "ERROR!"
    Dim $Array

    $Gui2 = GUICreate("Ort", "701", "661")
    GUISetOnEvent($GUI_EVENT_CLOSE, "Exit2")
    $Zens = GUICtrlCreateButton("Zens", "20", "200")
    GUICtrlSetOnEvent(-1, "Zens")
    $Zens = GUICtrlCreateButton("Zens", "600", "300")
    GUICtrlSetOnEvent(-1, "Zens")
    $Zens = GUICtrlCreateButton("Zens", "20", "500")
    GUICtrlSetOnEvent(-1, "Zens")
    $Exit = GUICtrlCreateMenu("Beenden")
    GUICtrlCreateMenuitem("Exit", $Exit)
    GUICtrlSetOnEvent(-1, "ExitMenu")
    GUISetState(@SW_HIDE, $Gui2)


    While 1
    Sleep(100)
    WEnd


    ;####################################- OBERGESCHOSSE -###########################################
    Func Og1()
    $msgn = "ers"
    $n = "1"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og1


    Func Og2()
    $msgn = "zwei"
    $n = "2"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og2


    Func Og3()
    $msgn = "drit"
    $n = "3"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og3


    Func Og4()
    $msgn = "vier"
    $n = "4"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og4


    Func Og5()
    $msgn = "fünf"
    $n = "5"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og5


    Func Og6()
    $msgn = "sechs"
    $n = "6"
    GUISetState(@SW_HIDE, $Gui1)
    GUISetState(@SW_SHOW, $Gui2)
    GUICtrlCreatePic(@ScriptDir & "\System\Zens.bmp", "5", "5", "691", "631")
    EndFunc ;==>Og6
    ;###################################- Ende OBERGESCHOSSE -#######################################

    Func Zens()
    $ort = "Zens"
    MsgBox(0, "Zens Drucker", "Die Drucker des " & $msgn & "ten Stockes am Zens wurden eingerichtet.")
    Exit
    EndFunc ;==>Zens


    Func Zens()
    $ort = "Zens"
    MsgBox(0, "Zens Drucker", "Die Drucker des " & $msgn & "ten Stockes am Zens wurden eingerichtet.")
    Exit
    EndFunc ;==>Zens


    Func Zens()
    $ort = "Zens"
    $Array = _FileListToArray ("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort,(""),1)
    For $i = 1 To $Array[0]
    ShellExecute ("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort & "\" & $Array[$i])
    Next

    MsgBox(0, "Zens Drucker", "Die Drucker des " & $msgn & "ten Stockes an der Zens wurden eingerichtet.")
    Exit
    EndFunc ;==>Zens

    Func ExitMenu()
    Exit
    EndFunc ;==>ExitMenu


    Func Exit2()
    Exit
    EndFunc ;==>Exit2

    [/autoit]

    teh_hahn's script ist auch gut, leider versteh ichs nicht.
    besser währe deshalb wenn du mein selbst geschriebenes verbesserst.

    mfg

    Manu

    PS: Zens ist nur Zensiert (es ist nicht der selbe begriff beim richtigen script.)

    Einmal editiert, zuletzt von ManuIt (19. Oktober 2007 um 12:17)

    • Offizieller Beitrag

    Hi,

    tausch mal diese Fkt aus:

    [autoit]


    Func Zens()
    $ort = "Zens"
    $Array = _FileListToArray("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort, (""), 1)
    If Not IsArray($Array) Then MsgBox(16, 'error', 'kein Array')
    For $i = 1 To $Array[0]
    ConsoleWrite("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort & "\" & $Array[$i] & @CRLF)
    ShellExecute("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort & "\" & $Array[$i])
    Next

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

    MsgBox(0, "Zens Drucker", "Die Drucker des " & $msgn & "ten Stockes an der Zens wurden eingerichtet.")
    Exit
    EndFunc ;==>Zens

    [/autoit]

    So long,

    Mega

  • Hi,

    also meine Version funktioniert 100%. Bitte überprüfe noch einmal folgendes:
    1. Ist ein Pfad z.B. wirklich: \\Zens\Zens\Group\Public\Printers\1Obergeschoss\Zens? Versuch den Pfad mal (ohne Verbindungen zum Host Zens zu haben) genau so bei Start-Ausführen einzutippen. Kommt dann eine Verbindung zustande?
    2. Brauchst Du wirklich keine Anmeldung an den Host?
    3. Ist das FilePattern korrekt.

    Wie gesagt, bei mir funktioniert es einwandfrei! (Auch mit ShellExecute!)

  • Hi teh_hahn,

    Deine Version funktioniert nicht (Meldung: parameter inkorrekt oder so).
    1. Der Pfad ist zu 100% korrekt, ich hab den min. 10x überprüft (ausserdem ist der Pfad des scripts rüberkopiert)

    2. Ja ich brauch wirklich keine Anmeldung. Ich kann einfach den Pfad eingeben (wie auf dem Scrnshot zu erkennen ist)

    3. Was ist FilePattern?

    Geht es bei dir mit .lnk Dateien?

    mfg

    Manu

    PS: Ich bin wirklich nicht verrückt!

    • Offizieller Beitrag

    Hi,

    ersetz mal

    [autoit]


    $Array = _FileListToArray("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort, (""), 1)

    [/autoit]


    durch

    [autoit]


    $Array = _FileListToArray("\\Zens\Zens\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort, '*.*' , 1)

    [/autoit]

    So long,

    Mega

  • Hi,
    mit FilePattern halt die Endung: ("*.lnk")

    Nim mal folgendes Skript und passe in der Zeile 79 den Pfad einmal fix an. Es funktioniert bei mir zu 100% mit Verknüpfungen:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <Array.au3>
    #include <File.au3>
    #include <GUIConstants.au3>

    main()

    Func OnAutoItStart()
    Opt("GUICoordMode", 2)
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    Func main()
    Local $ah_ogbts[2], $as_files = 0
    Local $h_zensbt = 0, $h_filemenu = 0, $h_exitmitem = 0, $h_msg = 0
    Local $s_path = "", $s_ogtext = ""
    Local $j = 1, $i_tmpog = 0, $i_og = 0

    GUICreate("Stockwerk", 320, 240)
    GUISetCoord(10, -20, 100, 20)
    For $i = 1 To 6
    ReDim $ah_ogbts[$j + 1]
    $ah_ogbts[$j] = GUICtrlCreateButton("Obergeschoss " & $i, -1, 10)
    $j += 1
    Next
    $ah_ogbts[0] = $j - 1

    $h_zensbt = GUICtrlCreateButton("&Zens", -1, 10)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_filemenu = GUICtrlCreateMenu("&File")
    $h_exitmitem = GUICtrlCreateMenuItem("E&xit", $h_filemenu)
    GUISetState()

    While 1
    $h_msg = GUIGetMsg()
    Switch $h_msg
    Case $GUI_EVENT_CLOSE, $h_exitmitem
    Exit
    Case $h_zensbt
    GUISetState(@SW_DISABLE)
    SplashTextOn("NOTICE", "Please wait...", 120, 60)
    $as_files = _FileListToArray($s_path, ("*.lnk"), 1)
    If @error = 1 Then
    MsgBox(16 + 262144, "ERROR", $s_path & " not found or invalid!")
    Exit (1)
    ElseIf @error = 4 Then
    MsgBox(16 + 262144, "ERROR", "No file(s) found in " & $s_path & "!")
    Exit (2)
    EndIf
    SplashOff()
    GUISetState(@SW_ENABLE)

    For $i = 1 To $as_files[0]
    ShellExecute($s_path & "\" & $as_files[$i])
    Next

    Switch $i_og
    Case 1
    $s_ogtext = "ers"
    Case 2
    $s_ogtext = "zwei"
    Case 3
    $s_ogtext = "drit"
    Case 4
    $s_ogtext = "vier"
    Case 5
    $s_ogtext = "fünf"
    Case 6
    $s_ogtext = "sechs"
    EndSwitch

    MsgBox(64, "Zens Drucker", "Die Drucker des " & $s_ogtext & "ten Stockes an der Zens wurden eingerichtet.")
    Exit
    EndSwitch

    $i_tmpog = _ArraySearch($ah_ogbts, $h_msg)
    If $i_tmpog <> -1 Then
    $i_og = $i_tmpog
    $s_path = "\\Delphi\NETLOGON"
    For $i = 1 To $ah_ogbts[0]
    GUICtrlSetState($ah_ogbts[$i], $GUI_DISABLE)
    Next
    GUICtrlSetState($h_zensbt, $GUI_ENABLE)
    GUICtrlCreatePic(@ScriptDir & "\system\Zens.bmp", 120, 10, 200, 240) ;~ To-Do: An aktuelle GUI-Begebenheiten anpassen!
    EndIf
    WEnd
    EndFunc ;==>main

    Func OnAutoItExit()
    GUIDelete()
    EndFunc ;==>OnAutoItExit

    [/autoit]


    Deine ErrorMeldung: (Meldung: parameter inkorrekt oder so) kommt in meinem Skript überhaupt nicht vor!
    Teste bitte einmal anhand meines Skriptes und baue das dann um. Bei mir funzt es wirklich.

    PS: Halte dich nicht für verrückt!

    Einmal editiert, zuletzt von teh_hahn (19. Oktober 2007 um 15:55)

  • Hi Leute...

    @Xeno,
    Dank deiner Idee, kommt das programm wenigstens bis zur Fehlermeldung die auch das Script von teh_hahn hat.

    teh_hahn
    Immernoch die selbe Fehlermeldung...
    Der einzige unterschied zu meinem script ist, dass es über das Laufwerk S: zugreift (was auch korrekt sein müsste).

    Mfg

    Manu

    2 Mal editiert, zuletzt von ManuIt (19. Oktober 2007 um 16:10)

  • Ja, dann läuft doch alles. Dann liegt es nur am ShellExecute. Versuch mal:

    [autoit]

    ShellExecute($s_path & "\" & $as_files[$i], "", "", "open")

    [/autoit]

    oder mit Run!

    EDIT: Jetzt sag nicht, da sind Leerzeichen in deinem Pfad!

    Einmal editiert, zuletzt von teh_hahn (19. Oktober 2007 um 16:23)

  • Geht nicht.
    Selbe Meldung. (habs auch mit run versucht)

    Da sind keine Leerzeichen im Pfad.

    Das muss ja fast ein Bug sein...

  • Nein, Problem wird hier die Dateiendung (lnk) sein. Was gibt er denn bei Run aus? Versuch die Verknüpfung mal mit der rundll32.exe (PrinterDialog usw.) zu öffnen, wenn das möglich ist.

  • Ich habe die Vermutung, dass er beim _FileListToArray die Endung .lnk findet und beim ShellExecute nach der Datei ohne die Endung .lnk sucht. Komischerweise zeigt es mir die Endung nicht an wenn ich in dem Ordner bin, obwohl ich das "Hide known extensions" oder was auch immer das häklein entfernt habe.
    Verstehst du?^^
    wie kann ich das .lnk beim shellexecute entfernen?

    mfg
    Manu

  • Das mit dem .lnk sagt mir das _FileListToArray.
    thxXx an alle für eure Hilfe.
    Ich probier mich mal schlau zu machen über das StringTrimRight.

    (edit: rechtschreibfehler^^)

    Einmal editiert, zuletzt von ManuIt (19. Oktober 2007 um 16:50)

  • Nein, kannst Du gleich vergessen!
    Das kann doch gar nicht funktionieren! Du hast in Deinem Ordner Verknüpfungen auf die Druckerverbindungen eines anderen Hosts. Wenn Du diese öffnest (lokal) dann gehst natürlich. Remote sieht das aber ganz anders aus. Du kannst nicht einfach die Druckereinstellungen eines anderen Hosts remote öffnen. Versuch mal die Verknüpfungen remote über den explorer zu öffnen. Da tut sich nix!!!

  • Ich kann die Dateien per draufklicken installieren.
    sogar über cmd.
    Aussichtslose Lage...
    das mit stringtrim hat auch nicht gefunzt.

    Schönes Wochenende!
    Ich geh jetzt nach Hause

  • teh_hahn: Ich habe jetzt das ganze noch lokal versucht.
    Es hat auch nicht geklappt.
    Hast dus wirklich mit .lnk dateien versucht?

    Hat wirklich keiner eine Ahnung, wieso das Script keine .lnk dateien ausführen kann?

    Einmal editiert, zuletzt von ManuIt (24. Oktober 2007 um 13:01)

  • ganz dumme Frage aus dem Bauch heraus:

    sind Leerzeichen im Pfad und spielt das bei shellexecute eine Rolle?

  • Es sind im aktuellen Pfad keine Leerzeichen und ich denke das spielt keine Rolle.
    Danke trotzdem, Vollnoob.
    Ich kann auch die dümmsten Fragen gebrauchen.

    MfG
    Manu

    Edit: Ich dachte immer, AutoIt kann verdammt viel.
    schade, dass es nicht mal Drucker verknüpfungen ausführen kann...

    Einmal editiert, zuletzt von ManuIt (24. Oktober 2007 um 16:53)