FileSelect

显示可以让用户打开或保存文件的标准对话框.

SelectedFile := FileSelect(Options, RootDir\Filename, Title, Filter)

参数

Options

类型: 字符串整数

如果省略, 则默认为 0, 这等同于下面的任意选项都没有指定. 否则, 指定下面列出数字或字母之一, 可选择在后面加一个数字. 例如, "M", 1"M1" 都是有效的(但不相同).

D: 选择文件夹(目录). 指定字母 D, 允许用户选择文件夹而不是文件. 该对话框具有与选择文件时相同的大部分功能, 但不支持过滤器(Filter 必须为空或省略).

M: 多选. 指定字母 M 让用户可以使用 Shift+点击, Control+点击或其他方法来选择多个文件. 在这种情况下, 返回值是一个数组不是一个字符串. 要提取单个文件, 请参阅本页底部的示例.

S: 保存对话框. 指定字母 S 让对话框显示保存按钮代替打开按钮.

可以使用以下数字. 要使其中多个数字生效, 请将它们相加. 例如, 要使用 1 和 2, 请指定数字 3.

1: 文件必须存在
2: 路径必须存在
8: 提示创建新文件
16: 提示覆盖文件
32: 选择快捷方式本身(.lnk 文件) 而不解析为它们的目标. 此选项也避免了通过文件夹快捷方式跳转到那个文件夹的情况.

由于 "提示覆盖" 选项只有保存对话框支持, 因此在没有 "提示创建" 选项的情况下指定该选项也会使 S 选项生效. 同样, 当 S 选项存在时, "提示创建" 选项也没有效果. 指定数字 24 可以启用对话框支持的任何一种提示类型.

RootDir\Filename

类型: 字符串

如果省略或为空, 则起始目录将为默认值, 这可能操作系统版本有关(它很可能是之前使用 FileSelect 时用户最近选择的目录). 否则, 请指定下列的一个或两个:

RootDir: 根(起始) 目录, 如果未指定绝对路径, 则假定为 A_WorkingDir 中的子文件夹.

Filename: 初始显示对话框时在编辑区域的默认文件名. 只显示单独的文件名(不带路径). 要让对话框正确显示, 请确保不包含非法字符(例如 /<|:").

示例:

"C:\My Pictures\Default Image Name.gif"  ; RootDirFilename 都存在.
"C:\My Pictures"  ; 仅 RootDir 存在.
"My Pictures"  ; 仅 RootDir 存在, 且它相对于当前工作目录.
"My File"  ; 仅 Filename 存在(但如果已存在 "My File" 的文件夹, 则它会被认为是 RootDir).
Title

类型: 字符串

如果为空或省略, 则默认为 "Select File - " A_ScriptName(即当前脚本的名称). 否则, 指定文件选择窗口的标题.

Filter

类型: 字符串

如果为空或省略, 对话框将显示所有类型的文件. 并在 "文件类型" 下拉列表中提供 "所有文件 (*.*)" 选项.

否则, 请指定一个字符串来指示对话框显示的文件类型, 例如 "文本文档 (*.txt)". 要在过滤器中包含多个文件扩展名, 请使用分号分隔它们, 例如 "Audio (*.wav; *.mp2; *.mp3)". 在这个例子中, "文件类型" 下拉列表中有指定的字符串和 "所有文件 (*.*)" 作为选项.

如果存在 “D” 选项, 该参数必须为空或省略.

返回值

类型: 字符串数组

如果没有启用多选, 此函数将返回用户选择的单个文件的完整路径和名称.

如果使用了 M 选项(多选), 此函数将返回一个项目数组, 其中每个项目是一个文件的完整路径和名称. 本页底部的示例演示了如何逐个提取文件. 如果用户取消对话框, 则数组为空(零项).

备注

文件选择对话框通常看起来像这样:

FileSelect

GUI 窗口可以使用 +OwnDialogs 选项的方法来显示模式文件夹选择对话框. 模式对话框在其消失之前会阻止用户与 GUI 窗口进行交互.

DirSelect, MsgBox, InputBox, ToolTip, GUI, CLSID List, parsing loop, SplitPath

此外, 操作系统提供了标准的对话框, 提示用户选取字体, 颜色或图标. 这些对话框可以通过 DllCallcomdlg32\ChooseFont, comdlg32\ChooseColorshell32\PickIconDlg 的组合来显示. 请在论坛中搜索示例.

示例

允许用户选择当前存在的 .txt 或 .doc 文件.

SelectedFile := FileSelect(3, , "Open a file", "Text Documents (*.txt; *.doc)")
if SelectedFile = ""
    MsgBox "The user didn't select anything."
else
    MsgBox "The user selected the following:`n" SelectedFile

允许用户选择多个当前存在的文件.

SelectedFiles := FileSelect("M3")  ; M3 = 选择多个现有文件.
if SelectedFiles.Length = 0
{
    MsgBox "The dialog was canceled."
    return
}
for FileName in SelectedFiles
{
    Result := MsgBox("File #" A_Index " of " SelectedFiles.Length ":`n" FileName "`n`nContinue?",, "YN")
    if Result = "No"
        break
}

允许用户选择文件夹.

SelectedFolder := FileSelect("D", , "Select a folder")
if SelectedFolder = ""
    MsgBox "The dialog was canceled."
else
    MsgBox "The following folder was selected:`n" SelectedFolder