C#利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本
屬性名稱 |
類型 |
備注 |
AllowUI |
BOOL |
檢測是否允許運(yùn)行用戶的接口元素。如果為False,則諸如消息框之類的界面元素不可見。 |
CodeObject |
Object |
腳本暴露給宿主調(diào)用的對(duì)象。只讀。 |
Modules |
Modules |
宿主提供給腳本的組件庫模塊。只讀。(COM組件通常都是以對(duì)象收集的形式向用戶提供可以留給用戶二次開發(fā)的對(duì)象集合,每一個(gè)收集即一個(gè)Modules) |
Language |
String |
設(shè)置或獲取腳本引擎解釋的語言,例如:VBScript、JScript。 |
Name |
String |
腳本引擎的名稱。只讀。 |
Procedures |
Procedures |
返回模塊中定義的過程的集合 |
SitehWnd |
HWND |
在腳本中顯示UI的父窗口句柄 |
State |
Enum |
設(shè)置或返回控件的狀態(tài),如果為0,控件只執(zhí)行語句但不轉(zhuǎn)發(fā)事件,為1則為加入的本控件接受的對(duì)象轉(zhuǎn)發(fā)事件。 |
Timeout |
Long |
控件的執(zhí)行腳本的超時(shí)值,-1表示不超時(shí) |
UseSafeSubset |
BOOL |
設(shè)置或返回宿主程序是否關(guān)心安全。宿主程序的安全級(jí)別可以從此屬性設(shè)置 |
Error |
Error |
錯(cuò)誤對(duì)象,發(fā)生錯(cuò)誤時(shí),此屬性返回一個(gè)錯(cuò)誤對(duì)象 |
方法名稱 |
參數(shù) |
功能 |
AddCode |
Code As String |
往腳本引擎中加入要執(zhí)行的腳本 |
AddObject |
Name As String, Object As Object, [AddMembers As Boolean = False] |
往腳本引擎加入一個(gè)對(duì)象,以便在腳本中可以使用該對(duì)象提供的方法等。 |
Eval |
Expression As String |
表達(dá)式求值 |
ExecuteStatement |
Statement As String |
解釋并執(zhí)行腳本語句 |
Reset |
|
丟棄所有的對(duì)象和代碼,將State屬性置0。 |
Run |
ProcedureName As String, ParamArray Parameters() As Variant |
運(yùn)行一個(gè)指定的過程 |
事件名稱 |
功能 |
Error |
有錯(cuò)誤發(fā)生時(shí)激發(fā)該事件 |
TimeOut |
執(zhí)行過程超時(shí)時(shí)發(fā)生 |
/* 添加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>
/// 構(gòu)造函數(shù)
/// </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>
/// 運(yùn)行eval方法
/// </summary>
/// <param name="expression">表達(dá)式</param>
/// <returns>返回值object</returns>
public object eval(string expression)
{
return msc.Eval(expression);
}
/// <summary>
/// 運(yùn)行run方法
/// </summary>
/// <param name="mainfunctionname">入口函數(shù)名稱</param>
/// <param name="parameters">參數(shù)</param>
/// <returns>返回值object</returns>
public object Run(string mainFunctionName, object[] parameters)
{
return msc.Run(mainFunctionName, ref parameters);
}
/// <summary>
/// 加入要執(zhí)行的腳本
/// </summary>
/// <param name="Code"></param>
public void AddCode(string Code)
{
msc.AddCode(Code);
}
/// <summary>
/// 解析并運(yùn)行
/// </summary>
/// <param name="Code">代碼</param>
public void ExecuteStatement(string Code)
{
msc.ExecuteStatement(Code);
}
/// <summary>
/// 放棄所有已經(jīng)添加到 scriptcontrol 中的 script 代碼和對(duì)象
/// </summary>
public void Reset()
{
msc.Reset();
}
/// <summary>
/// 獲取或設(shè)置腳本語言
/// </summary>
public string Language
{
get { return msc.Language; }
set { msc.Language = value; }
}
/// <summary>
/// 獲取或設(shè)置腳本執(zhí)行時(shí)間,單位為毫秒
/// </summary>
public int Timeout
{
get { return ((IScriptControl)msc).Timeout; }
set { ((IScriptControl)msc).Timeout = value; }
}
/// <summary>
/// 設(shè)置是否顯示用戶界面元素
/// </summary>
public bool AllowUI
{
get { return msc.AllowUI; }
set { msc.AllowUI = value; }
}
/// <summary>
/// 宿主應(yīng)用程序是否有保密性要求
/// </summary>
public bool UseSafeSubset
{
get { return msc.UseSafeSubset; }
set { msc.UseSafeSubset = true; }
}
private void ScriptEngine_Error()
{
//錯(cuò)誤事件
}
private void ScriptEngine_Timeout()
{
//超時(shí)事件
}
}
}
相關(guān)文章
詳解三種C#實(shí)現(xiàn)數(shù)組反轉(zhuǎn)方式
本篇文章主要介紹了詳解三種C#實(shí)現(xiàn)數(shù)組反轉(zhuǎn)方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04C#最簡單的關(guān)閉子窗體更新父窗體的實(shí)現(xiàn)方法
原理就是將子窗體最為對(duì)話框模式彈出,當(dāng)窗體關(guān)閉或取消時(shí)更新主窗體2012-11-11c#求點(diǎn)到直線的投影點(diǎn)坐標(biāo)
這篇文章主要介紹了c#求直線外一點(diǎn)到該直線的投影點(diǎn),大家參考使用吧2013-12-12C#中使用ArrayPool和MemoryPool實(shí)例
對(duì)資源的可復(fù)用是提升應(yīng)用程序性能的一個(gè)非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它們就有效的減少了內(nèi)存使用和對(duì)GC的壓力,從而提升應(yīng)用程序性能。感興趣的可以了解一下2021-05-05.NET中保證線程安全的高級(jí)方法Interlocked類使用介紹
這篇文章主要介紹了.NET中保證線程安全的高級(jí)方法Interlocked類使用介紹,Interlocked類可以為為多個(gè)線程共享的變量提供原子操作,需要的朋友可以參考下2014-07-07C# 獲取數(shù)據(jù)庫中所有表名、列名的示例代碼
這篇文章主要介紹了C# 獲取數(shù)據(jù)庫中所有表名、列名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06