关于检测用户有无安装某个软件的问题
一、材料:
function ocxstatus() {
var NewObj;
try {
NewObj = new ActiveXObject("TVANTSX.TvantsXCtrl.1");
if (typeof NewObj != 'undefined') {
NewObj = null;
return true;
}
} catch (e) {
NewObj = null;
return false;
}
}
二、问题:
上面黄色背景部分貌似是一个组件名称。现在不能解决的问题是不知道各个播放器的组件名称是什么,目前只知道clsId啊!!!
三、解决问题:
上网找了很多资料,很多都是要知道知道clsId才行的,经过辛勤搜索终于在某个网站的某个角落找到了这段代码:
可以 用ActiveX js调用ActiveX
页面上
<OBJECT STYLE='display:none;' ID='byd_icc' NAME='byd_icc' classid='clsid:4E0841CC-655F-4355-ADEB-484A443FE3A7' CODEBASE='BYD_ICCR.CAB#version=1,0,0,0'></OBJECT>
body中加ActiveX对象
js调用
var tempCardID = byd_icc.getCardIDByHEX();//调用ActieX
if (tempCardID != "") {
this.trReadCard.stopAll();
this.loginUser(tempCardID);
byd_icc.clearCardID();
previousCardID = "";
}
这种方法就是知道classid就可以解决问题的!!!但是坑爹的是,经过测试以上代码纯属坑爹,是不能实现的,M的欺骗了我的感情。
看来,只有靠自己了。
既然无法用代码方式实现使用classId检测有无安装某个软件,那么为什么不尝试着看看那个所谓的“组件名称”到底是什么呢?
我首先想到了安装文件,于是就在安装文件那里找,终于找到了这个东西PowerList.ocx 安装目录下的ActiveX控件,这时候真是喜出往外,十有八九就是她了。但是悲剧的是经过测试,证实,所谓的组件名称并不是它!!!。。。。。。。。。。。。。。。过了一会,我想,既然都知道了classid,classid又是在注册表中的,我为什么不尝试一下从注册表入手呢!!!于是我在注册表clsId目录下搜索软件对应的classid,终于被我发现了一个叫做ProId里面的东西很眼熟,额、、、就是它了,原来这种所谓的组件名称叫做ProId,注册表可查。接下来的问题很容易解决了,就算不知道classId,耐心点也可以在注册表中找到软件所谓的“组件名称”,也就是ProId。