打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CreateObject 过程

[UMU WSH 教程](9)CreateObject 过程

[UMU WSH 教程](5)脚本超时

[UMU WSH 教程](6)命令行参数

[UMU WSH 教程](7)WScript 对象

[UMU WSH 教程](8)脚本中的脚本


  本篇要讲的是对象的创建,属于 COM 的内容,这里不可能说太多,大家可以找一些 COM 的书看看,也可以看看 UMU 的其他关于 COM 的文章:《ATL 体验》、《基于 WebBrowser 的新型应用程序研究小记》、《学习 ATL 的理由》、《关于 COM 的几个概念问题》、《关于 COM 的几个概念问题(2)》。最常见的对象有:WScript.Shell、Scripting.FileSystemObject、Scripting.Dictionary 等,这里以 WScript.Shell 为例。

  马上来看对象的创建过程,语句 Set objWSH = CreateObject( "WScript.Shell" ):

  1、CreateObject 函数先检查注册表 HKEY_CLASSES_ROOT\WScript.Shell 下的子键 CurVer 的默认值,结果为 WScript.Shell.1,所以知道最新版本是 WScript.Shell.1;


  2、读 HKEY_CLASSES_ROOT\WScript.Shell.1,下面有一个子键 CLSID,默认值为 {72C24DD5-D70A-438B-8A42-98424B88AFB8};


  3、找到了 HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8},子键 InProcServer32 的默认值说明服务程序是 C:\WINDOWS\system32\wshom.ocx。


  4、对于脚本可以调用的 COM 对象,要使用对象里的方法 TypeLib 是必要的,HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\TypeLib 的默认值是 {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B},HKEY_CLASSES_ROOT\TypeLib\{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}\1.0\0\win32 的默认值说明类型库是 C:\WINDOWS\system32\wshom.ocx。

  支持脚本调用的 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)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
WIN2003服务器六条安全策略 - Sine服务器安全信息网--服务器安全设置,服务器维...
关闭网站的危险的wscript.shell命令行执行
Windows2003服务器安全策略
如何防止ASP木马在服务器上运行?
跨站攻击
“暴风一号”U盘病毒最新查杀工具
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服