ActiveX控件是微软开发的一系列策略性面向对象程序技术和工具,IE流行的互联网早期,大量的ActiveX控件被应用于各种场景,学校,银行,企业官网等,随着浏览器安全升级,最新版浏览器已经都不支持Activex/OCX控件,但是大量企业面临历史业务无法升级,只能用IE浏览器继续苟延残喘,如何在新版谷歌Chrome上加载IE的Activex/OCX控件成为一个难题。
针对这些需求,猿大师团队2019年就开始布局,陆续发布了,猿大师播放器(网页加载VLC播放器/FFPLAY播放器来播放RTSP视频流)、猿大师办公助手(网页加载微软OFFICE/金山WPS/永中OFFICE实现在线编辑WORD/EXCEL/PPT文档)、猿大师CAD助手(网页加载AutoCAD、Solidworks、Catia等在线预览编辑CAD图纸)三个成熟且商业化软件,获得了包含交通、水利、教育、消防等政府单位及大中小型企业的广泛使用。
2025年猿大师又发布了OCX网页内嵌程序和EXE网页内嵌程序,可以在最新Chrome等主流浏览器中直接内嵌本机OCX控件或者桌面应用EXE程序,使网页内嵌OCX控件和桌面应用不再是难题。
第一步:注册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":""}}