ITKeyword,专注技术干货聚合推荐

注册 | 登录

(微软脚本引擎)C#利用msscript.ocx控件执行JS脚本

(微软脚本引擎)C#利用msscript.ocx控件执行JS脚本到微软的网站上下载Windows Script Control,它是一个ActiveX(R) 控件,所以在.NET中使用我Interop了一下。下载安装完成后,新建一个C#的Windows应用程序项目,在解决方案资源管理器中选中引用节点,右键点击选择添加引用菜单,弹出添加引用对话框,单击浏览找到安装Windows Script Control的目录,选取msscript.ocx文件确定。那么在引用节点下会增加一个MSScriptControl组件,下面是他Interop后的所有对象。 ScriptControl 对支持 ActiveX(TM) Script 的宿主 Script 引擎提供简单接口。接下来我们对被转化成ScriptControlClass类的ScriptControl的属性和方法进行一些说明。 属性 属性描述AllowUI应用于 ScriptControl 本身或 Scirpt 引擎显示的用户界面元素,可读写。CodeObject返回对象,该对象用于调用指定模块的公用成员。只读。Error返回 Error 对象,其中包含所发生的最后一个错误的相关详细信息。只读。Language设置或返回正在使用的 Script 语言名称。可读写。Modules为 ScriptControl 对象返回模块集合。只读。Procedures返回在指定模块中定义的过程集合。只读。SitehWnd设置或返回窗口的 hWnd,通过执行 Script 代码,此窗口用于显示对话框和其他用户界面元素。可读写。State设置或返回 ScriptControl 对象的模式。可读写Timeout设置或返回时间(毫秒),此时间后用户可选择中止 Script 代码的执行或允许代码继续执行。可读写。UseSafeSubset设置或返回 Boolean 值,指明宿主应用程序是否有保密性要求。如果宿主应用程序需要安全控制,则 UseSafeSubset 为 True,否则为 False。可读写。方法方法描述AddCode向模块添加指定代码。可多次调用 AddCode 方法AddObject使主机对象模型对 Script 引擎可用Eval计算表达式并返回结果ExecuteStatement执行指定的语句Reset放弃所有已经添加到 ScriptControl 中的 Script 代码和对象Run运行指定过程事件事件描述Error出现运行时错误时,发生此事件Timeout当超出了 Timeout 属性指定的时间且用户在结果对话框中选定了 End 时,发生此事件说明:AllowUI 属性如果设置为False,则显示对话框之类的语句不起作用,如在 VBScript 中MsgBox 语句,JavaScript中的alert等,并且如果执行的脚本超出TimeOut设置的毫秒数,也不会跳出超出时间提醒的对话框,反之则相反;重新设 置 Language 属性会清空AddCode加载的代码;对于TimeOut属性,发生超时时,ScriptControl 检查对象的 AllowUI 属性,确定是否允许显示用户界面元素。 为了使控件更容易使用,用ScriptEngine类封装一下,下面是完整代码:代码using System;using MSScriptControl;using System.Text;namespace LCS.Web{

/// <summary>

/// 脚本类型

/// </summary>

public enum ScriptLanguage

{

/// <summary>

/// JScript脚本语言

/// </summary>

JScript,

/// <summary>

/// VBscript脚本语言

/// </summary>

VBscript,

/// <summary>

/// JavaScript脚本语言

/// </summary>

JavaScript

}

/// <summary>

/// 脚本运行错误代理

/// </summary>

public delegate void RunErrorHandler();

/// <summary>

/// 脚本运行超时代理

/// </summary>

public delegate void RunTimeoutHandler();

/// <summary>

/// ScriptEngine类

/// </summary>

public class ScriptEngine

{

private ScriptControl msc;

/// <summary>

/// 定义脚本运行错误事件

/// </summary>

public event RunErrorHandler RunError;

/// <summary>

/// 定义脚本运行超时事件

/// </summary>

public event RunTimeoutHandler RunTimeout;

/// <summary>

///构造函数 默认为 VBscript 脚本类型

/// </summary>

public ScriptEngine()

: this(ScriptLanguage.VBscript)

{ }

/// <summary>

/// 构造函数

/// </summary>

/// <param name="language">脚本类型</param>

public ScriptEngine(ScriptLanguage language)

{

this.msc = new ScriptControlClass();

this.msc.UseSafeSubset = true;

this.msc.Language = language.ToString();

((DScriptControlSource_Event)this.msc).Error += new DScriptControlSource_ErrorEventHandler(OnError);

((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(OnTimeout);

}

/// <summary>

/// 运行Eval方法

/// </summary>

/// <param name="expression">表达式</param>

/// <param name="codeBody">函数体</param>

/// <returns>返回值object</returns>

public object Eval(string expression, string codeBody)

{

msc.AddCode(codeBody);

return msc.Eval(expression);

}

/// <summary>

/// 运行Eval方法

/// </summary>

/// <param name="language">脚本语言</param>

/// <param name="expression">表达式</param>

/// <param name="codeBody">函数体</param>

/// <returns>返回值object</returns>

public object Eval(ScriptLanguage language, string expression, string codeBody)

{

if (this.Language != language)

this.Language = language;

return Eval(expression, codeBody);

}

/// <summary>

/// 运行Run方法

/// </summary>

/// <param name="mainFunctionName">入口函数名称</param>

/// <param name="parameters">参数</param>

/// <param name="codeBody">函数体</param>

/// <returns>返回值object</returns>

public object Run(string mainFunctionName, object[] parameters, string codeBody)

{

this.msc.AddCode(codeBody);

return msc.Run(mainFunctionName,ref parameters);

}

/// <summary>

/// 运行Run方法

/// </summary>

/// <param name="language">脚本语言</param>

/// <param name="mainFunctionName">入口函数名称</param>

/// <param name="parameters">参数</param>

/// <param name="codeBody">函数体</param>

/// <returns>返回值object</returns>

public object Run(ScriptLanguage language, string mainFunctionName, object[] parameters, string codeBody)

{

if (this.Language != language)

this.Language = language;

return Run(mainFunctionName, parameters, codeBody);

}

/// <summary>

/// 放弃所有已经添加到 ScriptControl 中的 Script 代码和对象

/// </summary>

public void Reset()

{

this.msc.Reset();

}

/// <summary>

/// 获取或设置脚本语言

/// </summary>

public ScriptLanguage Language

{

get { return (ScriptLanguage)Enum.Parse(typeof(ScriptLanguage), this.msc.Language, false); }

set { this.msc.Language = value.ToString(); }

}

/// <summary>

/// 获取或设置脚本执行时间,单位为毫秒

/// </summary>

public int Timeout

{

get { return 0; }

}

/// <summary>

/// 设置是否显示用户界面元素

/// </summary>

public bool AllowUI

{

get { return this.msc.AllowUI; }

set { this.msc.AllowUI = value; }

}

/// <summary>

/// 宿主应用程序是否有保密性要求

/// </summary>

public bool UseSafeSubset

{

get { return this.msc.UseSafeSubset; }

set { this.msc.UseSafeSubset = true; }

}

/// <summary>

/// RunError事件激发

/// </summary>

private void OnError()

{

if (RunError != null)

RunError();

}

/// <summary>

/// OnTimeout事件激发

/// </summary>

private void OnTimeout()

{

if (RunTimeout != null)

RunTimeout();

}

}}

(微软脚本引擎)C#利用msscript.ocx控件执行JS脚本到微软的网站上下载Windows Script Control,它是一个ActiveX(R) 控件,所以在.NET中使用我Interop了一下。下载安装完成后,新建...

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。