22-3 Is銗缶程

若要執行其他應用程式,可以先產生一個 WSH 的 shell 物件,然後再使用 run() 函數來呼叫其他應用程式。

例如,若要播放一個聲音檔案,我們可以呼叫錄音機在背景播放,範例如下:

原始檔(audioPlay01.js):(灰色區域按兩下即可拷貝)
// 播放音訊檔案
audioFile = "chimes.wav";
shell = new ActiveXObject("Wscript.Shell");
command = "sndrec32 /play /close \"" + audioFile + "\"";
command = "soundRecorder /play /close \"" + audioFile + "\"";
command = "start " + audioFile;
WScript.echo(command);
shell.Run(command, 0);

執行上述範例,就可以聽到 windows 啟動的音效。(請記得要把喇叭打開,才能聽到音效。)在上述範例中,shell.Run(command, 0) 的第二個參數 0,代表不開啟所呼叫應用程式的視窗。如果你忽略此參數(或將此參數設定為 1),就可以看到錄音機的視窗。

Hint
我們當然也可以呼叫媒體播放器來播放,但是這是「殺雞用牛刀」,因為媒體播放器太肥太慢了!使用錄音機來播放聲音檔案,已經夠快夠好了。

Hint
上述範例只適用於 Windows XP。如果的作業系統是 Vista,你必須將 sndrec32.exe 改成 SoundRecorder.exe。

我們也可以使用類似方式來開啟小畫家,但此時 shell.Run 的第二個參數就必須設定成 1,否則你會看不到小畫家的畫面,範例如下:

原始檔(imageDisplay01.js):(灰色區域按兩下即可拷貝)
// 使用小畫家顯示影像檔案
imageFile = "annie.jpg";
shell = new ActiveXObject("Wscript.Shell");
command = "mspaint " + imageFile;
shell.Run(command, 1); 

開啟後的畫面如下:

下列這個範例,會開啟 DOS 命令視窗(並列出執行 dir 的結果)以及開啟記事本(並載入 run01.js),程式碼如下:

原始檔(run01.js):(灰色區域按兩下即可拷貝)
// 如何由 WSH 執行其他應用程式

shell = WScript.CreateObject("WScript.Shell");	// 產生 WSH Shell
shell.Run("cmd /K dir");			// 開啟 DOS 命令視窗並執行 dir
shell.Run("wordpad.exe run01.js");		// 開啟記事本並載入本檔案

在上述範例中,所開啟的應用程式會保持開啟狀態,而 WSH 會持續執行其後的程式碼。若要等待應用程式被關閉後,才繼續執行其後的 WSH 程式碼,可以在 run() 之後再加上第三個參數,請試試這個範例:

原始檔(run02.js):(灰色區域按兩下即可拷貝)
// 如何由 WSH 執行其他應用程式,並等待應用程式結束後才繼續執行 WSH 程式碼

shell = new ActiveXObject("WScript.Shell");
intReturn = shell.Run("notepad " + WScript.ScriptFullName, 1, true);
shell.Popup("記事本已經被關閉!");

在執行上述範例時,WSH 會先開啟記事本,並停留在記事本,直到記事本被關閉後,才會顯示警告視窗。

Hint
以 JScript 撰寫 WSH 時,下面兩列程式碼都可以產生 shell 物件:
  1. shell = WScript.CreateObject("WScript.Shell");
  2. shell = new ActiveXObject("WScript.Shell");

我們也可以使用 Exec() 函數來執行另一個應用程式,下個範例打開小算盤,並顯示相關的資訊:

原始檔(exec01.js):(灰色區域按兩下即可拷貝)
// 由 WSH 呼叫計算機

WshShell = new ActiveXObject("WScript.Shell");
oExec = WshShell.Exec("calc.exe");
// 若未開啟,持續等待,直至開啟完畢
while (oExec.Status == 0)
	WScript.Sleep(100);
// 印出相關訊息
WScript.Echo("Status = " + oExec.Status);
WScript.Echo("ProcessID = " + oExec.ProcessID);
WScript.Echo("ExitCode = " + oExec.ExitCode);


JScript 程式設計與應用:用於單機的 WSH 環境