标题: [问题求助] vbs如何获取所有本机可用的com组件名称 [打印本页]
作者: ghost-jason 时间: 2014-11-16 17:03 标题: vbs如何获取所有本机可用的com组件名称
本帖最后由 pcl_test 于 2016-10-9 11:06 编辑
比如 : set ws = CreateObject("sapi.spvoice") 中的"sapi.spvoice"中这是对象名称是怎么得到的。也就是我想明白windows中所有库的对象名称。怎么办呢。我百度了。但是不是很全。比如说用vbs发信件的时候用的到的对象名称是什么。出来常用的wscript.shell scripting.filesystemobject 等等的名称还有哪些。我总觉得我只会这两种了。觉得vbs的功能我总是把她发挥不到最大。求大神指点。复制粘贴的。谢谢!!!!
作者: CrLf 时间: 2014-11-16 17:17
以前写过这个东西:http://bbs.bathome.net/thread-30886-1-1.html,把关键部分提取出来,存为 listcom.js,运行即可得到本机可用的com组件.txt- var fso = new ActiveXObject('Scripting.FileSystemObject')
- var ts = fso.CreateTextFile('本机可用的com组件.txt',true)
- ts.Write(listcom().join('\r\n'))
-
-
- function listcom(){
- //列举本机所有的 com 组件
- //主要代码修改自 http://hi.baidu.com/badguest/item/b091cc5b61b99c14db163563
- var retArr=[]
- var ws = new ActiveXObject('WScript.Shell')
- var dict = new ActiveXObject('Scripting.Dictionary')
- var oLoc=new ActiveXObject("WbemScripting.SWbemLocator")
-
- var HKCR=0x80000000
-
- var oReg=oLoc.ConnectServer(null,"root\\default").Get("StdRegProv")
- var oMethod=oReg.Methods_("EnumKey")
- var oInParam=oMethod.InParameters.SpawnInstance_()
- oInParam.hDefKey=HKCR
- oInParam.sSubKeyName=''
- var NameAndType=oReg.ExecMethod_(oMethod.Name,oInParam)
- var arrSubKeys=NameAndType.sNames.toArray()
-
- //~列举HKEY_CLASSES_ROOT中所有键
- for(var i=0;i<arrSubKeys.length;i++){
- var key=arrSubKeys[i]
- if(key.search(/..\./)<0)continue
- if(key.search(/..\..*\./)>0){
- /*~there's a dot. Is there another one?
- yes, so this name is version specific
- check whether we already have a
- version-independent progid! */
- independent = key.replace(/.+?$/,'')
- if (!dict.Exists(independent)){
- //~no, store it
- dict.Add(key, 0)
- }
- }else{
- /*~this one is version-independent.
- do we already have a version-dependent
- progID in store?*/
- var vdpid = ""
-
- for(var element in dict){
- if (element.length>key.length){
- if (element.substring(key.length)==key + "."){
- //~yes, return name
- vdpid = element
- break
- }
- }
- }
-
- //~any version dependent progID found?
- if (vdpid.length) {
- //~yes, replace
- dict.Remove(vdpid)
- dict.Add(key, '')
- }else{
- //~no, add to store
- dict.Add(key, '')
- }
- }
- }
- var arr = new VBArray(dict.Keys()).toArray();
- for (var i=0;i<arr.length;i++){
- retArr.push(arr[i])
- }
- return retArr
- }
复制代码
作者: CrLf 时间: 2014-11-16 18:05
假如需要找和 excel 相关的组件,我是这样做的:
1、打开 js.exe(JScript控制台 v1.1)
2、输入这个命令:listcom().grep(/excel/i)
如果要输出到文件,就输入这个:- $Out = create('Excel相关的组件.txt',true)
- listcom().grep(/excel/i)
- exit()
复制代码
作者: ghost-jason 时间: 2014-11-19 10:06
回复 2# CrLf
谢谢大牛了。 :) :)
作者: ghost-jason 时间: 2014-11-19 10:28
回复 3# CrLf
大牛,比如我想获得qq,或者搜狗浏览器,或者任何一个我安装在电脑上的应用程序的组件是我该怎么做,就像应用程序是不是没有组件啊求指导。谢谢大神了
作者: CrLf 时间: 2014-11-19 15:17
回复 5# ghost-jason
参考 3 楼,试试- listcom().grep(/Tencent|QQ|TX/)
复制代码
复制代码
再不行换其他关键词试试
作者: ghost-jason 时间: 2014-11-19 15:37
回复 6# CrLf
恩恩,非常感谢大神
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |