程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#利用ScriptControl動態執行JS和VBS腳本

C#利用ScriptControl動態執行JS和VBS腳本

編輯:C#基礎知識
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()
        {
            //超時事件
        }
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved