Wscript.Echo "Hey."
請注意,我們並沒有建立 Wscript 物件,而是在呼叫 Windows Script Host 時,自動為我們建立了 Wscript 物件。
但這種情形只適用於 Wscript 物件。您還可以建立其他的 WSH 物件,其中包括 Shell 物件。例如,下列簡單的小 HTA 就能建立 Wscript.Shell 物件,然後執行 Notepad.exe (在執行過程中開啟檔案 C:\Scripts\Test.txt):
<html>
<head>
<script language="VBScript">
Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad.exe c:\scripts\test.txt"
End Sub
</script>
</head>
<body>
<button onclick="RunProgram">Run Program</button> <p>
</body>
</html>
您可以看到,這大概是最簡單的 HTA 了:其中只包含一個按鈕,按下以後,會執行稱為 RunProgram 的副程式。請檢視一下 RunProgram 的程式碼:
Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad.exe c:\scripts\test.txt"
End Sub
就是這樣:我們建立了 Wscript.Shell 物件的執行個體,然後呼叫 Run 方法。在這種手法中,我們傳給 Run 一個參數:可執行檔名稱 (notepad.exe),隨後跟著到我們所要開啟檔案的路徑。這是我們唯一需要執行的步驟。
順帶一提,只要在 HTA 中執行這個步驟,一切都會順利運作。但如果嘗試在 HTML 檔案 (也就是副檔名為 .htm 的檔案) 中執行,就會顯示一個訊息方塊,警告您有 ActiveX 控制項嘗試要在頁面上執行。此時必須按一下 [是],允許副程式建立 Shell 物件,然後再繼續執行。這是由於 WSH 物件被視為「對指令碼處理來說是不安全的」。
附註:是的,這聽起來確實有點奇怪,指令碼處理物件在指令碼處理上被視為不安全?那是因為 Internet Explorer 所使用的指令碼裝載和安全性模型都與 WSH 不同。不過幸好 HTA 所使用的安全性模型與 Internet Explorer 不同,也就是說,您在 HTA 之中建立 Shell 物件時,並不會碰到這種問題。 |
那,其他的替代方法呢?好,如果您因為某些原因,不要使用 Wscript.Shell 物件,那麼就可以改用 Windows Shell 物件。這種 HTA 也可以啟動記事本,然後開啟檔案 C:\Scripts\Test.txt:
<html>
<head>
<script language="VBScript">
Sub RunProgram
Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "notepad.exe", "c:\scripts\test.txt", , , NORMAL_WINDOW
End Sub
</script>
</head>
<body>
<button onclick="RunProgram">Run Program</button> <p>
</body>
</html>
不過老實說,我們實在看不出來使用 Windows Shell 物件跟使用 Wscript.Shell 物件相比,有任何明顯的優勢:兩種物件都能執行相同的作業。但是,如果您想再深入探索 Windows Shell,請參閱有關 ShellExecute (英文) 方法的說明文件。重點就是:如果想從 HTA 啟動應用程式,兩種方法都可行。 |