Const WINDOW_HANDLE = 0
Const OPTIONS = 0
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")
If objFolder Is Nothing Then
Wscript.Quit
End If
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
Wscript.Echo objPath
我們先是定義一組常數:WINDOW_HANDLE 和 OPTIONS。WINDOW_HANDLE 常數代表一個數字 ID,這個數字 ID 需要指派到我們要顯示的對話方塊,對於指令碼來說,這個值應該固定為 0。將 OPTIONS 設為 0 表示我們要顯示一個非常簡單的對話方塊,會限制使用者從資料夾清單中進行選取。或者,可以將 OPTIONS 設為 &H10&,這樣一來,我們的對話方塊就會包含一個文字區域,讓使用者鍵入資料夾路徑。
定義好常數之後,會建立 Shell.Application 物件的執行個體,接著使用此段程式碼來顯示瀏覽資料夾對話方塊。
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")
如您所見,我們只呼叫了 BrowseForFolder 方法,傳遞四個參數:
- WINDOW_HANDLE,這跟我們提到的一樣,是指派給對話方塊視窗的數字 ID。
- 文字字串「Select a folder」(選取資料夾),它的作用是作為顯示在對話方塊中的指示性訊息。
- OPTIONS,此為常數,代表建構對話方塊時所使用的選項。
- C:\,它的用途是作為對話方塊的根資料夾。對話方塊會開啟在 C:\,而且不容許您選取任何比樹狀結構還高的檔案位置 (例如,您不能選取 [我的電腦])。如果將根資料夾設成 C:\Scripts,那麼使用者就只能選取 C:\Scripts 資料夾和其任一子資料夾。
該段程式碼會產生與這個出現在螢幕上的對話方塊:
(如果您還在猜測,沒錯,您看過這個對話方塊。許多 Windows 應用程式都利用相同的方法和相同的對話方塊)。
指令碼到目前為止會暫停,等候使用者選取資料夾,並按 [確定] 或按 [取消]。當使用者進行下列兩個動作之一時,就會關閉對話方塊,而且動作會存放在 objFolder 的物件參考中。
那我們要怎麼知道使用者到底是選取了資料夾,還是按了 [確定],或者只是按了 [取消] 呢?這正是此段程式碼的作用所在:
If objFolder Is Nothing Then
Wscript.Quit
End If
此程式碼會檢查我們的物件參考 (objFolder),看看是否剛好等於實際的物件 (這是 Nothing 關鍵字的用途)。如果 objFolder 的確等於 Nothing,表示使用者按下了 [取消],這樣的話,就直接使用 Wscript.Quit 來結束指令碼。如果 objFolder 不等於 Nothing,那麼 objFolder 就必須參考實際物件,而指令碼會繼續它愉快的旅途。
因為 Shell 物件中的怪癖,必須加上接下來的兩行程式碼:
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
當使用者選取資料夾並按下 [確定] 時,會得到 Shell Folder 物件的執行個體。不過,基於某種原因,您不能對 Shell Folder 物件進行任何動作,如果想要擷取選定資料夾的路徑,我們必須改用 FolderItem 物件 (原因何在?我們也不知道)。因此我們的第一行程式碼使用 Self 方法,傳回一個與 Folder 物件剛好一模一樣的 FolderItem 物件。程式碼的第二行接著會把 FolderItem 物件的 Path 存放到一個名為 objPath 的變數中。有點怪,但行得通。
最後回應選定資料夾的路徑,就大功告成了:
就像之前提過的,我們的範例對話方塊使用 C:\ 作為根資料夾,而且不讓您選取位在電腦上任何地方以外的資料夾。這有時候是件好事,可強迫使用者從特定的資料夾組選擇。可是有時候,您會希望給使用者機會選擇位在檔案系統上任何地方的資料夾。有這可能嗎?
絕對有。這一段修改過的指令碼我們就不詳述,不過這段指令碼會將 [我的電腦] 設為根資料夾:
Const MY_COMPUTER = &H11&
Const WINDOW_HANDLE = 0
Const OPTIONS = 0
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(MY_COMPUTER)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Select a folder:", OPTIONS, strPath)
If objFolder Is Nothing Then
Wscript.Quit
End If
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
Wscript.Echo objPath
跟您預期的一樣,所得到的對話方塊提供許多選項讓您選擇:
這不正就是您要的嘛,而且希望不是醫生交代的。
|