一.使用MSScriptControl 到微软的网站上下载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 属性,确定是否允许显示用户界面元素。
如果读者需要更详细的了解,可以查看MSDN文档。
为了使控件更容易使用,我用一个ScriptEngine类包装了一下,下面是完整代码:
复制代码 代码如下:
using System;
using MSScriptControl;
using System.Text;
namespace ZZ
{
/// <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;
//定义脚本运行错误事件
public event RunErrorHandler RunError;
//定义脚本运行超时事件
public event RunTimeoutHandler RunTimeout;
/// <summary>
///构造函数
/// </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(ScriptEngine_Error);
((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(ScriptEngine_Timeout);
}
/// <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 para
相关推荐:
今时CMS:引领数字化转型的智慧之选,河南seo优化网站联系方式
ChatGPTWindows版本:让AI助手成为你的工作与生活得力助手,Ai相减变形
AI网站开发与代码创新:引领未来数字化变革的关键,ai ay规则
seo规范是什么,seo行业标准 ,啊龙ai音乐
AI缩写在线:让人工智能助力你行业前沿技术,ai uhrehara
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
ChatGPT破解:人工智能未来的无限可能,污污AI解说
SEO优化基础:让你的网站脱颖而出的秘密武器,模仿猫ai
seo的推广工具,seo推广软件哪个好 ,国内ai写作论文怎么样
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
文章生成AI:让写作轻松高效的神奇工具
SEO子-为你的网站注入流量的秘密武器,麻城网站网址优化
了解SEO:让你的网站在搜索引擎中脱颖而出的秘密武器,宝山区常见网站优化
SEO获客的秘诀:如何通过搜索引擎优化提升客户获取能力,厦门seo搜索优化排名
ChatGPT显示“此网站无法加载站点”:背后原因与解决办法详解,用ai画明度渐变条
ChatGPT昨晚突然不能使用,背后真相令人意想不到!,edga ai
SEO占位:如何在竞争激烈的市场中占得先机?,梁平区省心全网营销推广
SEO出来,打破流量瓶颈,助力企业增长的关键策略,南昌营销推广代理商电话
SEO快速提升SEO排名的有效策略:让你的网页飞跃搜索引擎,ai调色食物
SEO刷:让你的网站一夜之间登顶搜索引擎!,独特seo技巧
用AI写文章,释放你的创作潜力!
ChatGPT无法使用?了解原因及解决方法,轻松恢复智能对话体验!,ai满版图案
ChatGPT为什么打不开了?揭秘背后的原因与解决办法,ai业务后端
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
文章缩写AI:高效编辑的未来之光
ChatGPT点不了?背后的真相与解决方法,ai.520523
人工润色:让文字更具魅力的秘密武器,快排seo软件哪个最好
ZBlog:开启你的个人网站新时代,轻松搭建与管理,二手手机营销推广方案
SEO就业前景如何?打造数字时代的职业新风口,常州武进区水产网站建设
优化平台:让数字化转型更简单、更高效,莆田谷歌seo品牌排行
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
二级泛站群,zblog二级泛站群 ,李宗盛ai
未来科技:AI工具为生活赋能,打造智能未来
SEM有哪几个平台?数字营销的多元选择,AI怎么取消移动间距
AI代谢文章:从灵感到成果的创作革命
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站
未来的效率利器AI软件下载AI,助您轻松驾驭智能世界
为什么行业都要做seo,为什么要做seo ,ai明信片
二创AI:打破创意壁垒,引领未来内容创作新潮流,背影教案网站建设游戏
SEO总计:如何通过SEO优化实现网站流量和排名的飞跃,三元桥网站优化
用AI写科普文章:科技改变写作的未来
ChatGPT服务异常:为何影响到你的工作和生活?如何有效解决?,ai怎么保持圆角不变
AI翻译工具的革命-ChatGPT等技术让语言互通无碍,淘宝ai写作检测准吗
SEO培训:助力企业实现互联网营销的无限可能,平塘网站优化推广价格
ChatGPT中显示已进行一处编辑,但看不到内容?你需要了解的隐藏问题!,ai敲
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
SEO优化:让你的网站在竞争中脱颖而出,临沧seo代理
seo需要什么能力,seo需要哪些技术 ,ai长条弯曲
ChatGPT您的应用遇到问题,无法正常启动?如何解决并重新体验智能助手的魅力!,男头ai关键词