当前位置:首页 » 编程软件 » activex执行脚本

activex执行脚本

发布时间: 2024-04-24 05:34:15

‘壹’ ActiveX脚本编程的术语简介

ActiveX scripting(ActiveX脚本编程)
一种使用脚本语言来驱动ActiveX组件的行为。

‘贰’ ActiveX脚本编程的介绍

ActiveX Scripting 技术是Microsoft ActiveX 技术的一个组成部分,它的主要目的是使应用程序在不被修改的情况下,可被各种脚本语言所控制。比如大家比较熟悉的Microsoft Office中的Word字处理软件,它提供了方便的BASIC语言的可编程特性,用户可以通过编写BASIC语言实现较为复杂的功能扩充。

‘叁’ activeX控件和脚本文件是什么呀

ActiveX是使软件组件能够在网络环境中交互作用而与创建组件的语言无关的一套封装技术。实现ActiveX 的基础是“组件对象模型”(Component Object Model ,缩写为COM)。它也是提供封装 COM组件并将其置入应用程序(如(但不限于)Web 浏览器)的一种方法。
给ActiveX组件(ActiveX component)一个定义,就是:一个应用程序或开发工具,可以使用另一个应用程序支持的对象,或者提供自己的对象供另一个应用程序使用。以前这些程序和对象称为“OLE 自动服务程序”和“OLE 自动服务器”。
至于ActiveX控件,则只是ActiveX组件的一个分类,是一个标准的用户接口元素,是具有 .OCX 文件扩展名或者可插入对象的文件,能够快速地把窗体和对话框组装起来;当使用自定义控件对话框将其增加到工程中去时,工具箱将被扩展。在以前ActiveX控件被称作 OLE 控件

脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。
脚本程序相对一般程序开发来说比较接近自然语言,可以不经编译而是解释执行,利于快速开发或一些轻量的控制。
现在的脚本语言是比较多的,一般的脚本语言的执行只同具体的解释执行器有关,所以只要系统上有相应语言的解释程序就可以做到跨平台。
脚本(Script),就是含有bind和alias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用。

脚本可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:exec(脚本文件名).cfg即可。比如将一个脚本存为buys.cfg文件,则在控制台中输入:execbuys.cfg则可以实现我们所需要的功能。要实现一个命令只要把这一过程定义(alias)好,并且分配一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程。所有的脚本都是通过这一方法实现的。

‘肆’ ActiveX脚本编程的实现方式

应用系统也需要实现一些接口,分别为:IActiveScriptSite和IActiveScriptSiteWindow(可选)。接口IActiveScriptSite是每一个支持脚本语言的应用系统所必须实现的接口,脚本引擎通过它来获取其宿主程序的信息,特别是在解释脚本语言中一些名字时更需要用到这些信息,IActiveScriptSite的接口定义如下:
class IActiveScriptSite : public IUnknown
{
public :
virtual HRESULT GetLCID( LCID *plcid) = 0;
virtual HRESULT GetItemInfo( LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown *ppiunkItem, ITypeInfo *ppti) = 0;
virtual HRESULT GetDocVersionString(BSTR *pbstrVersion) = 0;
virtual HRESULT OnScriptTerminate(const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo) = 0;
virtual HRESULT OnStateChange( SCRIPTSTATE ssScriptState) = 0;
virtual HRESULT OnScriptError( IActiveScriptError *pscripterror) = 0;
virtual HRESULT OnEnterScript( void) = 0;
virtual HRESULT OnLeaveScript( void) = 0;
};
在这些成员函数中,GetItemInfo是关键函数,因为脚本引擎管理了一个名字空间,脚本引擎在解释执行过程中,如果需要某个名字的信息,则通过宿主程序的IActiveScriptSite::GetItemInfo函数获取。所以,应用系统通过GetItemInfo成员函数把自己的一些对象暴露给脚本引擎,以便在脚本文件中引用。
IActiveScriptSiteWindow接口是一个可选的接口,如果在脚本文件中要用到用户接口UI特性,则应用系统应该实现IActiveScriptSiteWindow接口,其定义很简单,如下:
class IActiveScriptSiteWindow : public IUnknown
{
public :
virtual HRESULT GetWindow( HWND *phwnd ) = 0;
virtual HRESULT EnableModeless( BOOL fEnable ) = 0;
};
脚本引擎通过GetWindow成员函数获取宿主窗口句柄,作为脚本中弹出窗口的父窗口。
除了应用系统需要实现上面两个接口用作它与脚本引擎之间的通讯之外,脚本引擎也实现了一组接口用作两者之间的通讯,这组接口包括:IActiveScript、IActiveScriptParse和其它一些用于调试、状态管理或者错误处理的接口,IActiveScript和IActiveScriptParse是必须实现的接口,以下是它们的定义:
class IActiveScript : public IUnknown
{
public:
virtual HRESULT SetScriptSite( IActiveScriptSite *pass) = 0;
virtual HRESULT GetScriptSite( REFIID riid, void **ppvObject) = 0;
virtual HRESULT SetScriptState( SCRIPTSTATE ss) = 0;
virtual HRESULT GetScriptState( SCRIPTSTATE *pssState) = 0;
virtual HRESULT Close( void) = 0;
virtual HRESULT AddNamedItem( LPCOLESTR pstrName, DWORD dwFlags) = 0;
virtual HRESULT AddTypeLib( REFGUID rguidTypeLib, DWORD dwMajor, DWORD dwMinor, DWORD dwFlags) = 0;
virtual HRESULT GetScriptDispatch( LPCOLESTR pstrItemName, IDispatch **ppdisp) = 0;
virtual HRESULT GetCurrentScriptThreadID( SCRIPTTHREADID *pstidThread) = 0;
virtual HRESULT GetScriptThreadID( DWORD dwWin32ThreadId,SCRIPTTHREADID *pstidThread) = 0;
virtual HRESULT GetScriptThreadState( SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState) = 0;
virtual HRESULT InterruptScriptThread( SCRIPTTHREADID stidThread,const EXCEPINFO *pexcepinfo, DWORD dwFlags) = 0;
virtual HRESULT Clone( IActiveScript **ppscript) = 0;
};
class IActiveScriptParse : public IUnknown
{
public:
virtual HRESULT InitNew( void) = 0;
virtual HRESULT AddScriptlet( LPCOLESTR pstrDefaultName,LPCOLESTR pstrCode, LPCOLESTR pstrItemName, LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, BSTR *pbstrName, EXCEPINFO *pexcepinfo) = 0;
virtual HRESULT ParseScriptText( LPCOLESTR pstrCode, LPCOLESTR pstrItemName,IUnknown *punkContext, LPCOLESTR pstrDelimiter,DWORD dwSourceContextCookie, ULONG ulStartingLineNumber,DWORD dwFlags, VARIANT *pvarResult,EXCEPINFO *pexcepinfo) = 0;
};
应用系统通过IActiveScript接口控制脚本引擎的各种行为,也可以获取引擎的各种状态。通常,应用系统首先调用IActiveScript::SetScriptSite成员函数把自身实现的IActiveScriptSite接口传递给引擎,以后引擎就通过该接口与应用系统通讯。而应用系统也可以通过IActiveScript的其它成员函数获取或者设置引擎的运行状态。接口IActiveScriptParse用于对脚本代码的操作,应用系统利用IActiveScriptParse接口装入脚本代码。
在介绍了应用系统和脚本引擎所实现的一些关键接口之后,我们再进一步看看应用系统和脚本引擎的协作过程:
(1)创建必要的受控对象,这些受控对象是指将要在脚本文件中引用到的Automation对象,通常是应用系统的文档对象,也可以是某些ActiveX控制;
(2)创建引擎对象,不同的脚本语言使用不同的引擎对象,通常我们使用VBScript引擎或者JavaScript引擎,创建得到的接口指针是应用系统控制引擎的惟一途径;
(3)装入脚本文件,调用引擎的IActiveScriptParse接口的ParseScriptText成员函数把脚本代码装入到引擎中,注意ParseScriptText成员函数只接收UNICODE字符串,如果程序中用到了ANSI字符串,则需要进行转换才能装入到引擎中;
(4)加入名字项,凡是应用系统中要暴露给脚本文件的所有对象都需要加入到引擎的名字空间中,可以通过调用IActiveScript接口的AddNamedItem成员函数来完成;
(5)启动引擎,以便运行脚本,直接调用IActiveScript::SetScriptState成员函数使其进入连接状态(运行状态)即可;
(6)引擎在执行脚本时,首先处理其名字空间中的名字项,调用应用系统IActiveScriptSite接口的GetItemInfo成员函数获取每一个名字所对应的受控对象的信息,主要是COM接口;如果在脚本中有事件控制函数的话,则还要获取受控对象的类型信息;
(7)在脚本执行过程中,当特定的事件发生时,引擎中的事件控制函数就要被调用;
(8)在脚本执行过程中,有可能会调用到受控对象的属性和方法,则引擎会通过它所获取的对象接口调用IDispatch::Invoke成员函数;
如果应用系统希望终止引擎的执行过程,可以调用IActiveScript::SetScriptState成员函数使其进入非运行状态即可。
以上的步骤基本上反映了应用系统和引擎之间的协作过程。在实际使用过程中,可以根据情况的不同灵活应用。

‘伍’ 请启动“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”安全设置,怎么弄急!

请启动“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”安全设置是设置错误造成的,解决方法为:

1、打开本地组策略编辑器程序窗口。

‘陆’ 对“对标记为可安全执行脚本的ActiveX控件执行脚本”设置为“启用”计算机有没有安全风险呢

有的。一些脚本会利用漏洞入侵。但用电脑来上网,就有安全风险。

热点内容
ios储存密码哪里看 发布:2024-09-08 09:30:02 浏览:869
opensslcmake编译 发布:2024-09-08 09:08:48 浏览:653
linux下ntp服务器搭建 发布:2024-09-08 08:26:46 浏览:744
db2新建数据库 发布:2024-09-08 08:10:19 浏览:173
频率计源码 发布:2024-09-08 07:40:26 浏览:780
奥迪a6哪个配置带后排加热 发布:2024-09-08 07:06:32 浏览:101
linux修改apache端口 发布:2024-09-08 07:05:49 浏览:209
有多少个不同的密码子 发布:2024-09-08 07:00:46 浏览:566
linux搭建mysql服务器配置 发布:2024-09-08 06:50:02 浏览:995
加上www不能访问 发布:2024-09-08 06:39:52 浏览:811