VBScript 與 JScript 是輕量、易學且廣泛應用的腳本語言,透過 COM (IDispatch/Automation) 呼叫元件極為便利。若應用程式內建腳本執行引擎,不僅簡化開發,更能大幅擴充軟體功能彈性(如使用者自訂宏、外掛邏輯、批次處理等)。
開發一個支援 Automation (IDispatch) 的獨立 EXE 元件 VBSEngin.exe,對外僅公開兩個方法:
| 方法 | 功能 | 參數說明 |
|---|---|---|
SetScriptLanguage(long nLanguage) | 設定腳本語言 | 0 = VBScript (預設) 1 = JScript |
Run(LPCSTR lpszProgram) | 執行腳本程式碼 | 傳入完整腳本原始碼字串 |
VBSEngin.exe、VBSEngin.tlb 複製至任意目錄,執行一次 VBSEngin.exe 完成 COM 註冊。CWinApp::InitInstance() 中呼叫 AfxOleInit(),或於使用前呼叫 CoInitialize(NULL),結束時呼叫 CoUninitialize()。VBSEngin.tlb,產生 IVBSEngin 包裝類別 (vbsengin.h/cpp)。#include "vbsengin.h"
void CMyDialog::OnRunScript()
{
IVBSEngin vbsEngin; // 宣告腳本執行代理物件
if (vbsEngin.CreateDispatch(_T("VBSEngin.Api"))) // 啟動代理
{
CString script = _T(
"Set word = CreateObject(\"Word.Application\")\n"
"word.Visible = True\n"
"word.Documents.Add\n"
"word.Selection.TypeText \"Hello\"\n"
"word.Selection.TypeParagraph\n"
"word.Selection.TypeText \"good morning\"\n"
"word.ActiveDocument.SaveAs \"c:\\Hello.doc\"\n"
"word.Quit False\n"
"Set word = Nothing"
);
vbsEngin.Run(script); // 執行腳本
vbsEngin.ReleaseDispatch(); // 釋放代理
}
}上述範例腳本示範:啟動 Word、建立文件、輸入文字、存檔為 c:\Hello.doc、關閉 Word。開發者可在 Word 中錄製巨集 (VBA),稍加修改即可轉為 VBScript/JScript 字串嵌入程式。
HRESULT,建議搭配 IScriptControl 進階錯誤處理 (非本文範圍)。#import 用法。本文配套原始碼 (VBSEngin 元件與 MFC 範例專案) 可供下載。