如果您对要部署它的系统有一定程度的控制,并且可以合理地确定它们安装了 Visual Studio或Microsoft HTML 帮助,则可以使用如下代码:
function filedialog(filt, def, title, save)
set dialog = CreateObject("MSComDlg.CommonDialog")
dialog.MaxFileSize = 256
if filt = "" then
dialog.Filter = "All Files (*.*)|*.*"
else
dialog.Filter = filt
end if
dialog.FilterIndex = 1
dialog.DialogTitle = title
dialog.InitDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
dialog.FileName = ""
if save = true then
dialog.DefaultExt = def
dialog.Flags = &H800 + &H4
discard = dialog.ShowSave()
else
dialog.Flags = &H1000 + &H4 + &H800
discard = dialog.ShowOpen()
end if
filedialog = dialog.FileName
end function
此外,将此问题的其他答案之一改编为 VBScript 代码(感谢@oddacorn!),如果您不能合理地确定您的用户将获得 VS 或 HTML 帮助,则应添加此功能。在程序启动时调用此函数。如果您已经拥有钥匙,请不要担心;在这种情况下,这不起作用。这应该适用于没有管理员权限的标准用户帐户。
'Make the MSComDlg.CommonDialog class available for use. Required for filedialog function.
function registerComDlg
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.CreateKey &H80000001, "Software\CLASSES\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905"
objRegistry.SetStringValue &H80000001, "Software\CLASSES\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905", "", "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
end function
请注意,我在此处从 HTML 中的 VBScript 代码的“查看源代码”改编了 filedialog 函数;在现代网络浏览器上,它们用于呈现代码示例的 HTML 似乎无法正确显示(在 IE 8 和 Chrome 上测试)。但幸运的是,代码仍然存在于 View Source 中。
我发现一件事对于在 Windows 7(SP1,完全修补)上进行这项工作至关重要;你必须设置dialog.MaxFileSize = 256
,否则你会得到一个运行时错误。
也就是说,以下代码在 Windows 7 SP1 上失败,但可能适用于旧版本的 Windows:
Set x = CreateObject("MSComDlg.CommonDialog")
x.ShowSave