Board logo

标题: [问题求助] 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
  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. }
复制代码

作者: CrLf    时间: 2014-11-16 18:05

假如需要找和 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()
复制代码

作者: 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 楼,试试
  1. listcom().grep(/Tencent|QQ|TX/)
复制代码
  1. listcom().grep(/Sogou/)
复制代码
再不行换其他关键词试试
作者: ghost-jason    时间: 2014-11-19 15:37

回复 6# CrLf


    恩恩,非常感谢大神




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2