关于检测用户有无安装某个软件的问题

一、材料:

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。