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

[原创] 来看看写脚本时都能调用哪些对象

[复制链接]
发表于 2013-4-19 22:16:09 | 显示全部楼层 |阅读模式
本帖最后由 wankoilz 于 2013-4-19 22:25 编辑

这是阅读Demon's Blog的文章 "VBS深入CreateObject函数" 后练手写的
运行后得到一个txt,里面罗列了你电脑上脚本可以调用的COM对象,献丑了各位!
  1. '查看写脚本时都能调用哪些COM对象
  2. 'From bbs.bathome.net BY wankoilz
  3. '参考 http://demon.tw/copy-paste/vbs-createobject-internal.html
  4. Option Explicit
  5. Dim fso,wshell,reg,f
  6. Dim fullname,colmatch,match,Submatch
  7. Dim i,str,result
  8. Set fso=CreateObject("scripting.filesystemobject")
  9. Set wshell=CreateObject("wscript.shell")
  10. fullname=GetPath(WScript.ScriptFullName)&"ProgrammableObjects.txt"
  11. wshell.Popup "稍等几秒钟...",2,"prompt"
  12. wshell.Run "reg export hkcr\clsid "&""""&fullname&""""&" /y",0,True
  13. Set f=fso.OpenTextFile(fullname,1,True,True)
  14. str=f.ReadAll():f.Close
  15. Set reg=New RegExp
  16. reg.Global=True
  17. reg.IgnoreCase=True
  18. reg.Pattern="ProgID\]\r\n@=(.*?)\r\n\r\n(.*?)Programmable"
  19. Set colmatch=reg.Execute(str)
  20. For Each match In colmatch
  21.     result=result&match.Submatches(0)&vbCrLf&vbCrLf
  22. Next
  23. result=Replace(result,"""","")
  24. fso.CreateTextFile(fullname,True,True).Write(result)
  25. wshell.Run fullname

  26. Function GetPath(fullname)
  27.     Dim arrTmp,i
  28.     arrTmp=Split(fullname,"")
  29.     For i=0 To UBound(arrTmp)-1
  30.         GetPath=GetPath&arrTmp(i)&""
  31.     Next
  32. End Function
复制代码
参考:http://demon.tw/copy-paste/vbs-createobject-internal.html,Demon's Blog值得一看!!
发表于 2013-4-19 23:57:57 | 显示全部楼层
恭喜楼主神功初成!
发表于 2013-4-29 08:28:20 | 显示全部楼层
14行报错,文件超出结尾
发表于 2013-4-29 19:42:15 | 显示全部楼层
http://demon.tw/reverse/vbscript-internal-createobject.html

http://demon.tw/programming/createobject-again.html

首先那篇文章不是我写的,是复制粘贴UMU的,文章下面有链接http://hi.baidu.com/umu618/item/8c621e8be433025d840fab07

其次UMU的文章并不完全正确

再次,就算那篇文章正确,你的代码也不正确
 楼主| 发表于 2013-4-29 23:49:37 | 显示全部楼层
To 3#:
我这里运行没问题...
To 4#:
抱歉,之前没注意那个链接。
我本身实力比较浅,读过那篇文章后闲来为练手才写这么个东东,代码不对的地方还请Demon指点,以免我误认子弟,感谢。
发表于 2013-4-30 09:15:45 | 显示全部楼层
第一,按照UMU的理论,Programmable或者Implemented Categories为{40FC6ED5-2438-11CF-A3DB-080036F12502}的组件都能被VBS调用,你的代码只列出了Programmable的

第二,某些CLSID下的ProgID子键为空,而你的代码没有判断ProgID是否为空,例如下面这样的,你的代码就会匹配到hex(0):

  1. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}]
  2. @="GestureRecognizer Class"

  3. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\InprocServer32]
  4. @=hex(2):25,00,43,00,6f,00,6d,00,6d,00,6f,00,6e,00,50,00,72,00,6f,00,67,00,72,\
  5.   00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,4d,00,69,00,63,00,\
  6.   72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,68,00,61,00,72,00,65,00,64,\
  7.   00,5c,00,49,00,6e,00,6b,00,5c,00,49,00,6e,00,6b,00,4f,00,62,00,6a,00,2e,00,\
  8.   64,00,6c,00,6c,00,00,00
  9. "ThreadingModel"="Both"

  10. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\ProgID]
  11. @=hex(0):

  12. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\Programmable]

  13. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\TypeLib]
  14. @=hex(0):

  15. [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\VersionIndependentProgID]
  16. @=hex(0):
复制代码
 楼主| 发表于 2013-4-30 10:24:22 | 显示全部楼层
感谢Demon兄回复。
这样一来别人看到帖子的时候就不会被误导了。
那么代码中罗列出来的只是部分对象了,但数目已经很多。
发表于 2013-4-30 10:44:08 | 显示全部楼层
我在winxpsp3测试的,换了台机器
还是报错
 楼主| 发表于 2013-4-30 11:44:14 | 显示全部楼层
我是win7,xp没试过。不过我觉得学习到如何查看可调用对象的方法就是了,vbs写出来不复杂的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:14 , Processed in 0.018340 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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