相信很多人都看過(guò)“嗨,Scripting Guy!”上面的一個(gè)問(wèn)題,就算沒(méi)有看過(guò)原文,也應(yīng)該看過(guò)被復(fù)制粘貼后的代碼。
我如何向用戶(hù)顯示一個(gè)用來(lái)選擇文件的對(duì)話框?
問(wèn):嗨,Scripting Guy!有沒(méi)有什么方法可以讓我使用腳本向用戶(hù)顯示一個(gè)對(duì)話框,供用戶(hù)選擇文件使用? — BF
答:您好,BF。如果您使用的是 Windows 2000,我們不知道實(shí)現(xiàn)此操作的方法,至少操作系統(tǒng)中沒(méi)有內(nèi)置這樣的方法。但如果您使用的是 Windows XP,情況就不同了。在 Windows XP 上,您可以使用“UserAccounts.CommonDialog”對(duì)象向用戶(hù)顯示一個(gè)標(biāo)準(zhǔn)的“文件打開(kāi)”對(duì)話框。可以用類(lèi)似以下代碼的腳本:
代碼我就不復(fù)制粘貼了,原文里面有,網(wǎng)上也到處都是。但是問(wèn)題在于,這段代碼只能用于 Windows XP 系統(tǒng)(Windows 2003 或許也可以,但是我沒(méi)有測(cè)試過(guò)),而現(xiàn)在 Windows 7 已經(jīng)逐漸開(kāi)始流行起來(lái)。在 Vista 和Windows 7 系統(tǒng)中默認(rèn)是不自帶 UserAccounts.CommonDialog 組件的(順便提一句,SAFRCFileDlg.FileOpen 和 SAFRCFileDlg.FileSave 組件也是沒(méi)有的)。
那么如何在 Windows 7 系統(tǒng)中向用戶(hù)顯示一個(gè)用來(lái)選擇文件的對(duì)話框呢?答案是 html 中的文件選擇對(duì)話框:
代碼如下:
Function BrowseForFile()
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
Dim tempName : tempName = fso.GetTempName()
Dim tempFile : Set tempFile = tempFolder.CreateTextFile(tempName & ".hta")
tempFile.Write _
"<html>" & _
"<head>" & _
"<title>Browse</title>" & _
"</head>" & _
"<body>" & _
"<input type='file' id='f' />" & _
"<script type='text/javascript'>" & _
"var f = document.getElementById('f');" & _
"f.click();" & _
"var shell = new ActiveXObject('WScript.Shell');" & _
"shell.RegWrite('HKEY_CURRENT_USER\\Volatile Environment\\MsgResp', f.value);" & _
"window.close();" & _
"</script>" & _
"</body>" & _
"</html>"
tempFile.Close
shell.Run tempFolder & "\" & tempName & ".hta", 0, True
BrowseForFile = shell.RegRead("HKEY_CURRENT_USER\Volatile Environment\MsgResp")
shell.RegDelete "HKEY_CURRENT_USER\Volatile Environment\MsgResp"
End Function
'Author: Demon
'Website: http://demon.tw
'Date: 2011/6/2
path = BrowseForFile()
If path <> "" Then WScript.Echo path