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?
Pfad aus Datei-Öffnen-Dialog herausfinden
-
- [ gelöst ]
-
penta.phoenix -
8. Dezember 2008 um 15:37 -
Geschlossen -
Erledigt
-
-
Hi,
so vielleicht oder habe ich was falsch verstanden ?
[autoit]
[/autoit]
Func src()
$path = FileOpenDialog("Select source file", @ScriptDir, "AutoIt v3 scripts (*.au3)", 1+2)
If not @error Then
GUICtrlSetData($input_src, $path)
EndIf
EndFunc
-
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
[/autoit] [autoit][/autoit] [autoit]
winwaitactive($dialogtitel) ; warten bis fenster geöffnet
$controlidpath=1137 ;per WindowInfo rauszufinden
$controlidfile=1148 ;hier z.b. opera browser$path="c:\programme\hallo"
[/autoit] [autoit][/autoit] [autoit]
$verz1=""
$file1=""while 1
[/autoit] [autoit][/autoit] [autoit]$verz=controlgettext($dialogtitel,"",$controlidpath)
[/autoit] [autoit][/autoit] [autoit]
$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....$path = $path & "\" & $file1
[/autoit]
msgbox(1,"Ende",$path)ciao
.Andy