FileSelectFile

Zeigt ein Standard-Dialogfenster an, mit dem der Benutzer eine oder mehrere Dateien öffnen oder speichern kann.

FileSelectFile, AusgabeVar , Optionen, RootVerz\Dateiname, Anzeigetext, Filter

Parameter

AusgabeVar

Name der Variable, in der die vom Benutzer ausgewählten Dateinamen gespeichert werden sollen. Diese Variable wird leer gemacht, wenn der Benutzer das Dialogfenster abbricht (bzw. keine Datei auswählen möchte).

Optionen

Fehlt dieser Parameter, wird das Dialogfenster ohne den unten genannten Optionen angezeigt.

M: Mehrfachauswahl. Geben Sie den Buchstaben M an, damit der Benutzer mehr als eine Datei auswählen kann - via UMSCHALT oder STRG modifizierte Klicks, oder anderweitig. Nach M kann optional eine der unten genannten Nummern erfolgen (zum Beispiel wäre sowohl M als auch M1 gültig). Das Beispiel ganz unten zeigt, wie einzelne Dateien extrahiert werden können.

S: Speichern-Button. Geben Sie den Buchstaben S an, um den Öffnen-Button im Dialogfenster durch einen Speichern-Button zu ersetzen. Nach S kann optional eine der unten genannten Nummern (oder die Summe von mehreren Nummern) erfolgen (zum Beispiel wäre sowohl S als auch S24 gültig).

Die folgenden Nummern können auch ohne M oder S angegeben werden. Um mehr als eine Nummer aktiv zu haben, addiert man sie. Damit zum Beispiel 8 und 16 aktiv sind, muss die Nummer 24 angegeben werden.

1: Datei muss vorhanden sein
2: Pfad muss vorhanden sein
8: Nachfragen, ob eine neue Datei erstellt werden soll
16: Nachfragen, ob die Datei überschrieben werden soll
32 [v1.0.43.09+]: Verknüpfungen (.lnk) werden wie sie sind ausgewählt, anstatt in ihre Ziele aufgelöst zu werden. Diese Option verhindert auch die Navigation in einen Ordner via Ordnerverknüpfung.

Wenn Option 16 ohne Option 8 verwendet wird, enthält das Dialogfenster einen Speichern- statt Öffnen-Button. Dieses Verhalten ist auf eine Eigenart von Windows zurückzuführen.

RootVerz\Dateiname

Dieser Parameter kann ein oder beide der folgenden Elemente enthalten:

RootVerz: Das Root- bzw. Startverzeichnis, das als Unterordner im A_WorkingDir-Verzeichnis vermutet wird, wenn kein absoluter Pfad angegeben ist. Fehlt dieses Element oder ist es leer, entscheidet standardmäßig das Betriebssystem, welches Startverzeichnis angezeigt werden soll (es ist wahrscheinlich das Verzeichnis, das der Benutzer zuletzt via FileSelectFile ausgewählt hat). [v1.0.43.10+]: In Windows XP/2003 und höher kann auch ein CLSID-Wert wie ::{20d04fe0-3aea-1069-a2d8-08002b30309d} (Arbeitsplatz/Computer) angegeben werden - in diesem Fall sollte jedes Unterverzeichnis nach dem CLSID-Wert mit einem umgekehrten Schrägstrich enden (ansonsten wird der Text nach dem letzten umgekehrten Schrägstrich als Dateiname interpretiert).

Dateiname: Ein Dateiname, der standardmäßig im Eingabefeld des Dialogfensters angezeigt werden soll. Es wird nur der Dateiname angezeigt (ohne Pfad). Für die korrekte Darstellung des Dialogfensters muss sichergestellt werden, dass keine illegalen Zeichen vorhanden sind (wie /<|:").

Beispiele:

C:\Meine Bilder\Standard-Bildname.gif  ; Sowohl RootVerz als auch Dateiname vorhanden.
C:\Meine Bilder  ; Nur RootVerz vorhanden.
Meine Bilder  ; Nur RootVerz vorhanden, und es ist relativ zum aktuellen Arbeitsverzeichnis.
Meine Datei  ; Nur Dateiname vorhanden (aber wenn "Meine Datei" als Ordner existiert, wird es als RootVerz vermutet).
Anzeigetext

Ein im Fenster angezeigter Text, der dem Benutzer mitteilt, was zu tun ist. Fehlt dieser Parameter oder ist er leer, wird standardmäßig "Select File - %A_ScriptName%" (der Name des aktuellen Skripts) angezeigt.

Filter

Gibt an, welche Dateitypen im Dialogfenster angezeigt werden sollen.

Beispiel: Dokumente (*.txt)
Beispiel: Audio (*.wav; *.mp2; *.mp3)

Wenn dieser Parameter fehlt, werden standardmäßig die Filter "All Files (*.*)" und "Text Documents (*.txt)" im aufklappbaren Auswahlfeld des Dialogfensters angezeigt.

Ansonsten wird die angegebene Zeichenkette und der Filter "All Files (*.*)" angezeigt. Um mehr als eine Dateierweiterung in den Filter einzubinden, trennt man sie mit Semikolons, wie oben gezeigt.

ErrorLevel

[v1.1.04+]: Dieser Befehl ist in der Lage, bei Misserfolg eine Ausnahme auszulösen. Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel wird auf 1 gesetzt, wenn der Benutzer das Dialogfenster geschlossen hat, ohne eine Datei ausgewählt zu haben (z. B. durch Drücken des Buttons "Abbrechen"), oder wenn das Betriebssystem sich weigert, das Dialogfenster anzuzeigen (selten). Ansonsten wird es auf 0 gesetzt.

Bemerkungen

Ein typisches Dateiauswahlfenster sieht wie folgt aus:

FileSelectFile

Wenn der Benutzer nichts ausgewählt hat (zum Beispiel weil er auf ABBRECHEN gedrückt hat), wird AusgabeVar leer gemacht.

Wenn die Mehrfachauswahl nicht aktiv ist, wird AusgabeVar auf einen Wert gesetzt, der den vollständigen Pfad und Namen der vom Benutzer ausgewählten Datei repräsentiert.

Wenn die M-Option (Mehrfachauswahl) aktiv ist, wird AusgabeVar auf eine Liste von Elementen gesetzt, die alle, außer das letzte, mit einem Zeilenumbruchszeichen (`n) enden. Das erste Element in der Liste ist der Pfad, den alle ausgewählten Dateien enthalten (dieser Pfad wird nur mit einem umgekehrten Schrägstrich enden, wenn es sich um ein Hauptverzeichnis wie C:\ handelt). Die anderen Elemente sind die ausgewählten Dateien (ohne Pfad). Zum Beispiel:

C:\Meine Dokumente\Neuer Ordner [dieser Pfad gilt für alle folgenden Dateien]
test1.txt [das sind die reinen Dateinamen: keine Pfadangabe]
test2.txt
... etc.

Das Beispiel ganz unten zeigt, wie diese Dateien einzeln extrahiert werden können.

Bei aktiver Mehrfachauswahl ist die Gesamtlänge aller ausgewählten Dateinamen auf 64 KB begrenzt. Dieser Grenzwert genügt in der Regel für mehrere tausend Dateien. Sollte dieser Wert dennoch überschritten werden, wird AusgabeVar leer gemacht.

Ein GUI-Fenster kann via Gui +OwnDialogs ein modales Dateiauswahlfenster anzeigen. Ein modales Dialogfenster verhindert, während es angezeigt wird, dass der Benutzer mit dem GUI-Fenster interagieren kann.

Bekannte Einschränkung: Startet man ein Timer, während ein Dateiauswahlfenster angezeigt wird, werden alle darin durchgeführten Aktionen, die der Benutzer versucht auszulösen, bis zum Ende des Timers hinausgezögert. Um das zu umgehen, verzichtet man entweder auf Timer mit komplexen Subroutinen, die eine lange Zeit in Anspruch nehmen, oder man deaktiviert alle Timer, während das Dialogfenster angezeigt wird:

Thread, NoTimers
FileSelectFile, AusgabeVar
Thread, NoTimers, false

[v1.0.25.06+]: Die Mehrfachauswahl-Option "4" ist veraltet. Allerdings wird diese Option aus Kompatibilitätsgründen mit älteren Skripten weiterhin wie vorgesehen funktionieren. Genauer gesagt, wenn der Benutzer nur eine Datei auswählt, wird AusgabeVar auf einen Wert gesetzt, der den vollständigen Pfad und Namen dieser Datei repräsentiert, gefolgt von einem Zeilenumbruchszeichen (`n). Wählt der Benutzer mehr als eine Datei aus, verhält sich diese Option wie die oben beschriebene M-Option, außer dass das letzte Element ebenfalls mit einem Zeilenumbruchszeichen (`n) endet.

Siehe auch

FileSelectFolder, MsgBox, InputBox, ToolTip, GUI, CLSID-Liste, Parsende Schleife, SplitPath

Das Betriebssystem bietet zudem Standard-Dialogfenster an, die der Benutzer zum Auswählen einer Farbe, einer Schriftart oder eines Symbols verwenden kann. Solche Dialogfenster können via DllCall() angezeigt werden, siehe dazu www.autohotkey.com/forum/topic17230.html.

Beispiele

FileSelectFile, AusgewählteDatei, 3, , Datei öffnen, Text-Dokumente (*.txt; *.doc)
if AusgewählteDatei =
    MsgBox, Der Benutzer hat nichts ausgewählt.
else
    MsgBox, Der Benutzer hat folgendes ausgewählt:`n%AusgewählteDatei%


; CLSID-Beispiel (benötigt XP/2003 oder niedriger):
FileSelectFile, AusgabeVar,, ::{645ff040-5081-101b-9f08-00aa002f954e}  ; Papierkorb.

; Mehrfachauswahl-Beispiel:
FileSelectFile, Dateien, M3  ; M3 = Mehrfachauswahl vorhandener Dateien.
if Dateien =
{
    MsgBox, Der Benutzer hat den Button "Abbrechen" betätigt.
    return
}
Loop, parse, Dateien, `n
{
    if A_Index = 1
        MsgBox, Die ausgewählten Dateien befinden sich alle in %A_LoopField%.
    else
    {
        MsgBox, 4, , Die nächste Datei ist %A_LoopField%.  Weiter?
        IfMsgBox, No, break
    }
}
return