ScriptControl接口
屬性名稱
類型
備注
AllowUI
BOOL
檢測是否允許運行用戶的接口元素。如果為False,則諸如消息框之類的界面元素不可見。
CodeObject
Object
腳本暴露給宿主調用的對象。只讀。
Modules
Modules
宿主提供給腳本的組件庫模塊。只讀。(COM組件通常都是以對象收集的形式向用戶提供可以留給用戶二次開發的對象集合,每一個收集即一個Modules)
Language
String
設置或獲取腳本引擎解釋的語言,例如:VBScript、JScript。
Name
String
腳本引擎的名稱。只讀。
Procedures
Procedures
返回模塊中定義的過程的集合
SitehWnd
HWND
在腳本中顯示UI的父窗口句柄
State
Enum
設置或返回控件的狀態,如果為0,控件只執行語句但不轉發事件,為1則為加入的本控件接受的對象轉發事件。
Timeout
Long
控件的執行腳本的超時值,-1表示不超時
UseSafeSubset
BOOL
設置或返回宿主程序是否關心安全。宿主程序的安全級別可以從此屬性設置
Error
Error
錯誤對象,發生錯誤時,此屬性返回一個錯誤對象
方法名稱
參數
功能
AddCode
Code As String
往腳本引擎中加入要執行的腳本
AddObject
Name As String, Object As Object, [AddMembers As Boolean = False]
往腳本引擎加入一個對象,以便在腳本中可以使用該對象提供的方法等。
Eval
Expression As String
表達式求值
ExecuteStatement
Statement As String
解釋並執行腳本語句
Reset
丟棄所有的對象和代碼,將State屬性置0。
Run
ProcedureName As String, ParamArray Parameters() As Variant
運行一個指定的過程
事件名稱
功能
Error
有錯誤發生時激發該事件
TimeOut
執行過程超時時發生
/* 添加COM引用:
Library MSScriptControl
C:\WINDOWS\system32\msscript.ocx
Microsoft Script Control 1.0
*/
例子:
代碼如下:
using MSScriptControl;
namespace zz
{
/// <summary>
/// scriptengine類
/// </summary>
public class ScriptEngine
{
private ScriptControl msc;
/// <summary>
/// 構造函數
/// </summary>
/// <param name="language">腳本類型,VBscript\JavaScript</param>
public ScriptEngine(string language)
{
msc = new ScriptControlClass();
msc.UseSafeSubset = true;
msc.Language = language;
((DScriptControlSource_Event)msc).Error += new DScriptControlSource_ErrorEventHandler(ScriptEngine_Error);
((DScriptControlSource_Event)msc).Timeout += new DScriptControlSource_TimeoutEventHandler(ScriptEngine_Timeout);
}
/// <summary>
/// 運行eval方法
/// </summary>
/// <param name="expression">表達式</param>
/// <returns>返回值object</returns>
public object eval(string expression)
{
return msc.Eval(expression);
}
/// <summary>
/// 運行run方法
/// </summary>
/// <param name="mainfunctionname">入口函數名稱</param>
/// <param name="parameters">參數</param>
/// <returns>返回值object</returns>
public object Run(string mainFunctionName, object[] parameters)
{
return msc.Run(mainFunctionName, ref parameters);
}
/// <summary>
/// 加入要執行的腳本
/// </summary>
/// <param name="Code"></param>
public void AddCode(string Code)
{
msc.AddCode(Code);
}
/// <summary>
/// 解析並運行
/// </summary>
/// <param name="Code">代碼</param>
public void ExecuteStatement(string Code)
{
msc.ExecuteStatement(Code);
}
/// <summary>
/// 放棄所有已經添加到 scriptcontrol 中的 script 代碼和對象
/// </summary>
public void Reset()
{
msc.Reset();
}
/// <summary>
/// 獲取或設置腳本語言
/// </summary>
public string Language
{
get { return msc.Language; }
set { msc.Language = value; }
}
/// <summary>
/// 獲取或設置腳本執行時間,單位為毫秒
/// </summary>
public int Timeout
{
get { return ((IScriptControl)msc).Timeout; }
set { ((IScriptControl)msc).Timeout = value; }
}
/// <summary>
/// 設置是否顯示用戶界面元素
/// </summary>
public bool AllowUI
{
get { return msc.AllowUI; }
set { msc.AllowUI = value; }
}
/// <summary>
/// 宿主應用程序是否有保密性要求
/// </summary>
public bool UseSafeSubset
{
get { return msc.UseSafeSubset; }
set { msc.UseSafeSubset = true; }
}
private void ScriptEngine_Error()
{
//錯誤事件
}
private void ScriptEngine_Timeout()
{
//超時事件
}
}
}