strSoundFile = "C:\Windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, True
指令碼的前兩行非常簡單。第一行只是將檔案路徑指派給變數 strSoundFile,第二行則建立 Wscript Shell 物件的執行個體,物件是用來實際執行「錄音機」的。
第三行就比較有技巧,為了從命令提示字元執行「錄音機」,需要輸入這個命令:
sndrec32 /play /close "C:\Windows\Media\Windows XP Error.wav"
前兩個命令列參數會告知「錄音機」先播放檔案並自行終止,第三個參數當然就是要播放的檔案名稱。這個範例中,並不需要以雙引號括住檔案路徑,只有在路徑名稱包含空格時才需要雙引號。我們先使用雙引號括住檔案路徑以供您做為範本,當您播放的音效檔路徑名稱中確實有空格時就可加以使用。因此:
sndrec32 /play /close "C:\Windows\Media\Notify.wav"
為了要使用雙引號括住檔案路徑,我們使用會在字串中插入雙引號的 Chr(34) 指令。因此這行程式碼,會將 sndrec32 /play /close、雙引號標記 (")、檔案 C:\Windows\Media\Notify.wav 以及另一個雙引號標記 (") 連接起來:
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
最後,第四行使用 Run 方法,傳遞剛剛建構的指令字串。參數 0 會讓「錄音機」以隱藏的視窗執行,True 告知指令碼先等候音效播放完畢再繼續後續的動作。
至於要讓訊息方塊在出現的同時播放聲音,您會發現其實很難做到,因為要載入「錄音機」並開始播放需要一到兩秒的時間。最好的辦法是進行兩件工作:第一,呼叫「錄音機」時使用 False 參數,這會告知指令碼啟動錄音機並繼續進行後續動作,而不需要等候音效播放完畢。
第二,使用 Wscript.Sleep 指令讓指令碼暫停大約一秒,這會讓「錄音機」有時間載入,幸運的話,音效將會在訊息方塊出現的時間開始播放。音效會「剛好」在訊息方塊出現的同時播放嗎?可能不會,但至少很接近了。
以下範例指令碼可以「大約」在彈出訊息方塊的同時播放音效:
strSoundFile = "C:\windows\Media\Notify.wav"
Set objShell = CreateObject("Wscript.Shell")
strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
objShell.Run strCommand, 0, False
Wscript.Sleep 1000
Msgbox "A problem has occurred."
|