查看文章 |
马上来看对象的创建过程,语句 Set objWSH = CreateObject( "WScript.Shell" ): 1、CreateObject 函数先检查注册表 HKEY_CLASSES_ROOT\WScript.Shell 下的子键 CurVer 的默认值,结果为 WScript.Shell.1,所以知道最新版本是 WScript.Shell.1;
支持脚本调用的 COM 对象必然要实现 IDispatch 接口,可以从 C:\WINDOWS\system32\wshom.ocx 的“资源 - TYPELIB”里看出来,每个对象开头的 7 个函数都是 QueryInterface、AddRef、Release、GetTypeInfoCount、GetTypeInfo、GetIDsOfNames、Invoke,前 3 个是 IUnknown 接口的函数。PE 文件里的 TYPELIB 资源是 *.idl 源码文件编译后的类型库的二进制数据,可以反编译回去。不过 UMU 推荐使用 eXeScope 查看,即使用 eXeScope 打开 C:\WINDOWS\system32\wshom.ocx,查看“资源 - TYPELIB”,可以看出每个接口函数的参数和返回值定义。 VB 开发环境就是这样知道对象里有什么函数的。所以,如果我们知道一个对象名,却不知道这个对象里有什么函数,可以用上面说的方法获得。 xuejinglan 于 2007年03月31日 星期六 11:40 问 UMU 这样一个问题:“系统中存在哪些对象,对象有那些函数可以调用,如何知道?”这个问题已经回答后一半了,下面回答前一半。 对象的注册信息 HKEY_CLASSES_ROOT\CLSID\{GUID} 下可能会有这样的一些子键:Control 说明该组件是一个 ActiveX 控件、Programmable 说明该组件支持自动化、Insertable 说明该组件可以被嵌入到一个 OLE 文档容器中。能找到 Programmable,说明支持自动化,也就是支持 IDispatch 接口,所以它可以被脚本语言使用。不过这种方式比较老了,现在已经被一个的组件类属代替,即 Implemented Categories 子键下面的 GUID 形式的子键。比如 HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502},看一下 HKEY_CLASSES_ROOT\Component Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502} 下的 409 字符串值为 Automation Objects,也就是“自动化对象”。 查找“自动化对象”可以使用 VS 带的工具 oleview.exe,它专门用来查看 OLE/COM 对象的注册信息,界面如下图: ![]() 人民群众可能有点头晕了,总结一下:组件类属为 {40FC6ED5-2438-11CF-A3DB-080036F12502}(Automation Objects) 的对象都支持被脚本调用。 接下去的创建过程不属于脚本应该考虑的范围,有兴趣学 COM 的话可以研究研究,很好的一个机制,值得学习。 OLE/COM Object Viewer 6.0 下载:http://umu.ys168.com/,Tools - VS - OleView.7z (96KB) |

