史上最强Chrome调用OCX控件方案

126 阅读4分钟

在Web开发领域,ActiveX控件(OCX控件)因其强大的功能和灵活性,长期以来一直被广泛应用于桌面应用程序中。然而,在Chrome浏览器中调用OCX控件,却是一个长期困扰开发者的难题。

今天,我们为您介绍一个中间件——猿大师中间件(www.yuanmaster.com/),它提供了一个简单有效的解决方案,帮助开发者在Chrome中轻松调用OCX控件。

猿大师中间件自从2019年发布以来,迄今为止不断迭代升级,目前针对不同需求发布了三个成熟且商用的产品:

**猿大师播放器:**浏览器中直接原生低延迟多路播放RTSP视频流,目前有VLC引擎版和多引擎版本,已经获得了政府、交通、消防、水利、电信等领域的广泛使用。

**猿大师办公助手:**浏览器中直接内嵌本机原生微软Office、金山WPS、永中Office实现在线编辑功能,提供了更安全的文档数据保护机制,还提供了完整嵌入整个Office软件窗口的模式,功能更全面,在政府、中大型企业的OA系统、ERP系统、招标系统及合同管理系统中广泛应用。

**猿大师CAD助手:**浏览器中直接调用本机的AutoCAD、Solidworks、CATIA、国产中望CAD实现在线编辑CAD图纸的功能,兼容格式包含不限于dwg、dxf、CATPart、frm、xt、sldprt、jt等各种主流的工程图文档。

2025年,猿大师发布了通用型OCX网页内嵌程序,只需要指定OCX控件的ClassID或ProgID,包括不限于IE中使用的ActiveX控件,只要有持续交互的窗口,不需要二次开发就可以使用。

第一步:注册OCX控件

1、把你要注册的OCX控件放在系统目录下。

32位系统将其复制到 C:windowssystem32 目录下。

64位系统将其复制到 C:WindowsSysWOW64 目录下。

2、以管理员身份运行cmd ==>> 输入命令:regsvr32 "ocx文件的完整路径" ==>> OCX注册成功

第二步:打开测试页面测试

比如:新版Chrome调用Adobe pdf reader的OCX控件打开PDF文档,如下图:

新版Chrome调用福昕OFD版式办公套件的OCX控件打开PDF文档,如下图:

新版Chrome调用VLC播放器播放RTSP视频流,如下图:

只需要指定OCX控件的ClassID或ProgID,包括不限于IE中使用的ActiveX控件,只要有持续交互的窗口,都可以使用,这样可以直接原来在IE下使用的ActiveX控件,直接用猿大师中间件通用OCX程序直接嵌入新版Chrome等主流浏览器,而不需要ActiveX控件源代码,也不需要提供SDK来定制开发。

以下是未单独封装OCX控件接口功能的通用请求方法

11)、请求获取属性值 Name 指定属性名称 如遇到取子接口的,名称增加子接口的名称,支持多级,比如获取VLC播放列表的数量名称用playlist.itemCount 下同 {"req":"OCX_GetProperty","rid":11,"para":{"Name":"src"}} {"req":"OCX_GetProperty","rid":11,"para":{"Name":"volume"}} {"req":"OCX_GetProperty","rid":11,"para":{"Name":"Toolbar"}} {"req":"OCX_GetProperty","rid":11,"para":{"Name":"playlist.itemCount"}} {"req":"OCX_GetProperty","rid":11,"para":{"Name":"input.rate"}} {"req":"OCX_PutProperty","rid":11,"para":{"Name":"video.logo.opacity"}} 返回: {"ret":0,"rid":11,"data":{"Ret":0,"Val":""}} 如果返回的是自动化接口,Val的值类似这样的:playlist={CatchDispatch},需要继续调用这个自动化接口的属性或方法时,接下来的请求里指定参数{CatchDispatch},否则默认调用控件主接口的,下同

12)、请求设置属性 Name 指定属性名称 如遇到设置子接口的,名称增加子接口的名称,支持多级 Val 指定属性值,字符串用""包含,字符串中包含\或"等字符时,需要加转义符\,数值型不用"",BOOL类型设置真时数值是-1 当需要释放缓存的自动化接口时,Name可以指定为类似这样的playlist={CatchDispatch},Val设置为0或空 {"req":"OCX_PutProperty","rid":12,"para":{"Name":"src","Val":"d:/zorro/test.pdf"}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"Toolbar","Val":-1}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"Visible","Val":-1}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"volume","Val":0}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"input.rate","Val":2}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"video.logo.opacity","Val":50}} {"req":"OCX_PutProperty","rid":12,"para":{"Name":"playlist={CatchDispatch}","Val"0}} 返回: {"ret":0,"rid":12,"data":{"Ret":0}}

13)、请求无传入参数方法 Name 指定方法名称 如遇到调用子接口的,名称增加子接口的名称,支持多级,比如调用VLC播放列表播放方法名称用playlist.play 下同 DID 也可以指定方法序号 {"req":"OCX_Invoke0","rid":13,"para":{"Name":"gotoFirstPage"}} {"req":"OCX_Invoke0","rid":13,"para":{"Name":"gotoNextPage"}} {"req":"OCX_Invoke0","rid":13,"para":{"Name":" playlist.play"}} 返回: {"ret":0,"rid":13,"data":{"Ret":0,"Val":""}}