Pfad aus Datei-Öffnen-Dialog herausfinden

  • Kann man irgendwie den kompletten Pfad aus einem fremden FileOpenDialog herausfinden?
    Ich habe hier ein Programm, wo ich mehrere Dateien öffnen muss. Diese liegen alle im Pfad "C:\Programm\Hallo\A\B\C".
    Der FileOpenDialog des Programms zeigt mir allerdings jedesmal den Ordner "Hallo" an. Deshalb muss ich dann jedesmal in meine jeweiligen Unterornder wechseln, hier "C".
    Mit ControlSend kann ich natürlich den Pfad eingeben lassen und mit Enter wechselt er dann da uch hin.
    Allerdings könnte der Pfad auch "C:\Programm\Hallo\A\B\X" oder "C:\Programm\Hallo\A\Y\" heißen, dann müsste ich jedesmal das Skript ändern oder eine Benutzereingabe verlangen.
    Mit ControlGetText habe ich es schon probiert, da kommt dann der Dateiname, aber halt nicht der Pfad.
    Geht das nicht einfacher?

    Einmal editiert, zuletzt von penta.phoenix (8. Dezember 2008 um 17:31)

  • Theoretisch ja, aber es ist der FileOpenDialog vo einem Progamm wie z.B. Firefox, Notepad, etc.
    Wäre der FileOpenDialog von mir selber, würde das Skript stimmen.
    Im Prinzip will ich auch genau das erreichen, was hier in $path stehen würde, nur wird der FileOpenDialog nicht von erzeugt.

  • Hallo,

    um nochmal dein Problem zu verstehen:
    - du hast eine (oder mehrere) Dateien TEST.TST irgendwo in einem Verzeichnis unterhalb von "c:\programm\hallo" stehen, die mit einem externen Programm geöffnet werden sollen.
    - der Fileopen-Dialog des extrenen Programms startet immer im verzeichnis \hallo\
    - um nicht "von Hand" im externen Programm das Verzeichnis per Dialog zur gesuchten Datei zu wechseln, soll diese Arbeit von deinem Script übernommen werden.

    Wenn du den Namen der Datei kennst und den Pfad dorthin, dann kannst du "c:\programm\hallo\"&$pfad&"\"&$dateiname" von deinem Skript in die Eingabeaufforderung im Fileopen-Dialog des externen Programms schreiben.

    ciao
    .Andy

  • Ja, Andy, genau so ist es. So will ich es auch machen.
    Gedacht war das.
    Ich rufe die erste Datei auf, z.B. "C:\Programm\hallo\A\B\test.txt".
    Das soll mein Skript erkennen damit es beim nächsten mal, wenn ich eine Datei öffnen will, den String "C:\Programm\hallo\A\B\" an die Eingabezeile des FileOpenDialog schickt und mit Enter bestätigt. Dadurch wird automatisch in den Ordner B gewechselt und ich kann die nächste Datei auswählen.

    Meine Hoffnung ist, dass ich mir eine manuelle Eingabe abhängig von hallo(hier also \A\B) sparen kann, da es beim ersten Öffnen ausgelesen werden kann(das hoffe ich).
    Ansonsten muss der User halt doch irgendwo eine relative Angabe machen. Das kommt aber nur als Notlösung in Frage.

  • Hallo,

    habe was gefunden, AutoIt Windowinfo ftw^^

    Du kannst beim ersten Starten des fremden Fileopendialogs aus diesem Dialog die einzelnen von dir ausgewählten Pfade "rauskopieren". Also gewissermaßen in einer Schleife den Namen im "Aktueller Ordner"-Feld abfragen.
    Genauso das "Dateiname" Eingabefeld abfragen. Nach dem Schließen des Dialogs ist der letzte Eintrag dort die geöffnete Datei gewesen.

    Beim nächsten Öffnen des Dialogs dann weiter wie gehabt, den kompletten Pfad in die Eingabezeile senden und los...

    Ich versuchen mal was zu basteln...

    ciao
    .Andy

  • Die Idee ist nicht schlecht. Er startet ja bei hallo, dann klick ich z.B. auf A, dann steht oben A.
    Jetzt muss ich nur schnell rausfinden, wie ich auf einen Wechsel reagieren kann. Sonst steht da nacher hallo\hallo\hallo\a\a\a\a\b\b\b, wär ein bischen blöd. Aber das bekomm ich hin.
    Danke für die Hilfe.

  • Hallo,

    so in etwa funzt es:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $dialogtitel="Öffnen" ; name Dialogfenster
    winwaitactive($dialogtitel) ; warten bis fenster geöffnet
    $controlidpath=1137 ;per WindowInfo rauszufinden
    $controlidfile=1148 ;hier z.b. opera browser

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

    $path="c:\programme\hallo"
    $verz1=""
    $file1=""

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

    while 1

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

    $verz=controlgettext($dialogtitel,"",$controlidpath)
    $file=controlgettext($dialogtitel,"",$controlidfile)

    if wingetstate($dialogtitel)=0 then exitloop

    If $verz1<>$verz then ;Verzeichnis wurde gewechselt
    $path = $path & "\" & $verz
    $verz1=$verz
    endif

    If $file1<>$file then ;Dateiname wurde gewechselt
    $file1=$file
    endif

    wend ;solange Dialog offen ist....

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

    $path = $path & "\" & $file1
    msgbox(1,"Ende",$path)

    [/autoit]

    ciao
    .Andy

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (8. Dezember 2008 um 18:52)