找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19586|回复: 6

[问题求助] vbs如何获取所有本机可用的com组件名称

[复制链接]
发表于 2014-11-16 17:03:16 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-10-9 11:06 编辑

比如 : set  ws = CreateObject("sapi.spvoice")  中的"sapi.spvoice"中这是对象名称是怎么得到的。也就是我想明白windows中所有库的对象名称。怎么办呢。我百度了。但是不是很全。比如说用vbs发信件的时候用的到的对象名称是什么。出来常用的wscript.shell  scripting.filesystemobject  等等的名称还有哪些。我总觉得我只会这两种了。觉得vbs的功能我总是把她发挥不到最大。求大神指点。复制粘贴的。谢谢!!!!
发表于 2014-11-16 17:17:29 | 显示全部楼层
以前写过这个东西:http://bbs.bathome.net/thread-30886-1-1.html,把关键部分提取出来,存为 listcom.js,运行即可得到本机可用的com组件.txt
  1. var fso = new ActiveXObject('Scripting.FileSystemObject')
  2. var ts = fso.CreateTextFile('本机可用的com组件.txt',true)
  3. ts.Write(listcom().join('\r\n'))


  4. function listcom(){
  5.         //列举本机所有的 com 组件
  6.         //主要代码修改自 http://hi.baidu.com/badguest/item/b091cc5b61b99c14db163563
  7.         var retArr=[]
  8.         var ws = new ActiveXObject('WScript.Shell')
  9.         var dict = new ActiveXObject('Scripting.Dictionary')
  10.         var oLoc=new ActiveXObject("WbemScripting.SWbemLocator")

  11.         var HKCR=0x80000000

  12.         var oReg=oLoc.ConnectServer(null,"root\\default").Get("StdRegProv")
  13.         var oMethod=oReg.Methods_("EnumKey")
  14.         var oInParam=oMethod.InParameters.SpawnInstance_()
  15.         oInParam.hDefKey=HKCR
  16.         oInParam.sSubKeyName=''
  17.         var NameAndType=oReg.ExecMethod_(oMethod.Name,oInParam)
  18.         var arrSubKeys=NameAndType.sNames.toArray()

  19.         //~列举HKEY_CLASSES_ROOT中所有键
  20.         for(var i=0;i<arrSubKeys.length;i++){
  21.                 var key=arrSubKeys[i]
  22.                 if(key.search(/..\./)<0)continue
  23.                 if(key.search(/..\..*\./)>0){
  24.                         /*~there's a dot. Is there another one?
  25.                         yes, so this name is version specific
  26.                         check whether we already have a
  27.                         version-independent progid! */
  28.                         independent = key.replace(/.+?$/,'')
  29.                         if (!dict.Exists(independent)){
  30.                                 //~no, store it
  31.                                 dict.Add(key, 0)
  32.                         }
  33.                 }else{
  34.                         /*~this one is version-independent.
  35.                         do we already have a version-dependent
  36.                         progID in store?*/
  37.                         var vdpid = ""

  38.                         for(var element in dict){
  39.                                 if (element.length>key.length){
  40.                                         if (element.substring(key.length)==key + "."){
  41.                                                 //~yes, return name
  42.                                                 vdpid = element
  43.                                                 break
  44.                                         }
  45.                                 }
  46.                         }

  47.                         //~any version dependent progID found?
  48.                         if (vdpid.length) {
  49.                                 //~yes, replace
  50.                                 dict.Remove(vdpid)
  51.                                 dict.Add(key, '')
  52.                         }else{
  53.                                 //~no, add to store
  54.                                 dict.Add(key, '')
  55.                         }
  56.                 }
  57.         }
  58.         var arr = new VBArray(dict.Keys()).toArray();
  59.         for (var i=0;i<arr.length;i++){
  60.                 retArr.push(arr[i])
  61.         }
  62.         return retArr
  63. }
复制代码
发表于 2014-11-16 18:05:21 | 显示全部楼层
假如需要找和 excel 相关的组件,我是这样做的:
1、打开 js.exe(JScript控制台 v1.1
2、输入这个命令:listcom().grep(/excel/i)
如果要输出到文件,就输入这个:
  1. $Out = create('Excel相关的组件.txt',true)
  2. listcom().grep(/excel/i)
  3. exit()
复制代码
 楼主| 发表于 2014-11-19 10:06:39 | 显示全部楼层
回复 2# CrLf


    谢谢大牛了。 :) :)
 楼主| 发表于 2014-11-19 10:28:30 | 显示全部楼层
回复 3# CrLf


    大牛,比如我想获得qq,或者搜狗浏览器,或者任何一个我安装在电脑上的应用程序的组件是我该怎么做,就像应用程序是不是没有组件啊求指导。谢谢大神了
发表于 2014-11-19 15:17:35 | 显示全部楼层
回复 5# ghost-jason


    参考 3 楼,试试
  1. listcom().grep(/Tencent|QQ|TX/)
复制代码
  1. listcom().grep(/Sogou/)
复制代码
再不行换其他关键词试试
 楼主| 发表于 2014-11-19 15:37:02 | 显示全部楼层
回复 6# CrLf


    恩恩,非常感谢大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:50 , Processed in 0.020448 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表