标题: [原创] 来看看写脚本时都能调用哪些对象 [打印本页]
作者: wankoilz 时间: 2013-4-19 22:16 标题: 来看看写脚本时都能调用哪些对象
本帖最后由 wankoilz 于 2013-4-19 22:25 编辑
这是阅读Demon's Blog的文章 "VBS深入CreateObject函数" 后练手写的
运行后得到一个txt,里面罗列了你电脑上脚本可以调用的COM对象,献丑了各位!- '查看写脚本时都能调用哪些COM对象
- 'From bbs.bathome.net BY wankoilz
- '参考 http://demon.tw/copy-paste/vbs-createobject-internal.html
- Option Explicit
- Dim fso,wshell,reg,f
- Dim fullname,colmatch,match,Submatch
- Dim i,str,result
- Set fso=CreateObject("scripting.filesystemobject")
- Set wshell=CreateObject("wscript.shell")
- fullname=GetPath(WScript.ScriptFullName)&"ProgrammableObjects.txt"
- wshell.Popup "稍等几秒钟...",2,"prompt"
- wshell.Run "reg export hkcr\clsid "&""""&fullname&""""&" /y",0,True
- Set f=fso.OpenTextFile(fullname,1,True,True)
- str=f.ReadAll():f.Close
- Set reg=New RegExp
- reg.Global=True
- reg.IgnoreCase=True
- reg.Pattern="ProgID\]\r\n@=(.*?)\r\n\r\n(.*?)Programmable"
- Set colmatch=reg.Execute(str)
- For Each match In colmatch
- result=result&match.Submatches(0)&vbCrLf&vbCrLf
- Next
- result=Replace(result,"""","")
- fso.CreateTextFile(fullname,True,True).Write(result)
- wshell.Run fullname
-
- Function GetPath(fullname)
- Dim arrTmp,i
- arrTmp=Split(fullname,"\")
- For i=0 To UBound(arrTmp)-1
- GetPath=GetPath&arrTmp(i)&"\"
- Next
- End Function
复制代码
参考:http://demon.tw/copy-paste/vbs-createobject-internal.html,Demon's Blog值得一看!!
作者: CrLf 时间: 2013-4-19 23:57
恭喜楼主神功初成!
作者: czjt1234 时间: 2013-4-29 08:28
14行报错,文件超出结尾
作者: Demon 时间: 2013-4-29 19:42
http://demon.tw/reverse/vbscript-internal-createobject.html
http://demon.tw/programming/createobject-again.html
首先那篇文章不是我写的,是复制粘贴UMU的,文章下面有链接http://hi.baidu.com/umu618/item/8c621e8be433025d840fab07
其次UMU的文章并不完全正确
再次,就算那篇文章正确,你的代码也不正确
作者: wankoilz 时间: 2013-4-29 23:49
To 3#:
我这里运行没问题...
To 4#:
抱歉,之前没注意那个链接。
我本身实力比较浅,读过那篇文章后闲来为练手才写这么个东东,代码不对的地方还请Demon指点,以免我误认子弟,感谢。
作者: Demon 时间: 2013-4-30 09:15
第一,按照UMU的理论,Programmable或者Implemented Categories为{40FC6ED5-2438-11CF-A3DB-080036F12502}的组件都能被VBS调用,你的代码只列出了Programmable的
第二,某些CLSID下的ProgID子键为空,而你的代码没有判断ProgID是否为空,例如下面这样的,你的代码就会匹配到hex(0):- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}]
- @="GestureRecognizer Class"
-
- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\InprocServer32]
- @=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,\
- 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,\
- 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,\
- 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,\
- 64,00,6c,00,6c,00,00,00
- "ThreadingModel"="Both"
-
- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\ProgID]
- @=hex(0):
-
- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\Programmable]
-
- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\TypeLib]
- @=hex(0):
-
- [HKEY_CLASSES_ROOT\clsid\{639F5AF5-BCED-4369-AC34-360B16D955FD}\VersionIndependentProgID]
- @=hex(0):
复制代码
作者: wankoilz 时间: 2013-4-30 10:24
感谢Demon兄回复。
这样一来别人看到帖子的时候就不会被误导了。
那么代码中罗列出来的只是部分对象了,但数目已经很多。
作者: czjt1234 时间: 2013-4-30 10:44
我在winxpsp3测试的,换了台机器
还是报错
作者: wankoilz 时间: 2013-4-30 11:44
我是win7,xp没试过。不过我觉得学习到如何查看可调用对象的方法就是了,vbs写出来不复杂的。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |