VBScript实现浏览文件对话框

发布时间 2023-04-30 02:07:05作者: 平静寄居者

闲着没事,折腾VBScript。VBScript最大的优点大概是三条,一是Windows内建,不需要安装其他软件,二是双击即可执行,无须编译,三是可以利用hta,比较容易做界面(至少比python强)。缺点除了出错处理比较烂之外,主要是比较老旧,微软没有兴趣维护,有的功能在新版Windows里已经失效了。

想用vbscript实现一个浏览文件对话框的功能,这个在.net winform里有现成的组建OpenFileDialog,但是在VBScript里实现却比较麻烦。先是找到一个BrowseForFolder,最初找到的写法是:

Set WshShell=CreateObject("Wscript.Shell")

WshShell.BrowseForFolder(0, "Please select the folder.", &H4000, "")

调试后发现,首先Wscript.Shell应该改为Shell.Application,其次,虽然可以打开显示文件列表的对话框,但是一旦选中文件后就会提示Unspecified error,查了资料,说Win 7 以后就不能用了。

又查到两种方法,分别是用UserAccounts.CommonDialog和mscomdlg.CommonDialog,结果都不行,貌似win 7以后也不能用了。

最后查到一种方法:

    Dim wso: Set wso = CreateObject("Wscript.Shell")
    Dim hta: hta = """about:<input type=file id=file>"                          & vbcrlf _
                 & "<script>resizeTo(0,0);"                                     & vbCrLf _
                 & "   file.click();"                                           & VbCrLf _
                 & "   fso = new ActiveXObject('Scripting.FileSystemObject');"  & vbCrLf _
                 & "   fso.GetStandardStream(1).WriteLine(file.value);"         & vbCrLf _
                 & "   close();"                                                & VbCrLf _
                 & "</script>"""

    Dim strFileName = wso.Exec("mshta.exe " & hta).StdOut.ReadLine

调试后报错,说string未结尾。调试了一会,发现是/s和两个单引号在作怪。分别用Chr(47)代替斜杠和用Chr(39)代替单引号,终于正常了。这个方法确实很巧妙,但这个例子也充分说明了VBScript的缺陷。