找回密码
 加入
搜索
查看: 14193|回复: 20

[系统综合] [已解决]已知对象的类名称,怎么样查询对象拥有的属性.

 火.. [复制链接]
发表于 2011-3-28 16:31:51 | 显示全部楼层 |阅读模式
本帖最后由 easefull 于 2011-3-29 15:02 编辑

比如,已知对象类名称"shell.application".
$oShell = ObjCreate("shell.application")    ; 获取窗口 Shell 对象
$oShellWindows=$oShell.windows          ; 获取窗口 shell 集合物件
怎么样才能知道"shell.application"下有几个像$oShell.windows的属性(这个是叫对象的属性吧)?
发表于 2011-3-28 16:33:12 | 显示全部楼层
oleview
 楼主| 发表于 2011-3-28 16:38:00 | 显示全部楼层
回复 2# ceoguang


是注册表找到这个"shell.application"对应的LocalServer32值.然后使用oleview打开相应的dll来查看吗?
但如果LocalServer32的值不是dll呢,比如"InternetExplorer.Application"
再像"Word.Application"之类的甚至是 exe加参数.那该怎么办?
发表于 2011-3-28 22:27:38 | 显示全部楼层
直接打开oleview看看就知道了
发表于 2011-3-29 09:17:20 | 显示全部楼层



最后一张图里就有具体的接口调用方法.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-3-29 14:04:00 | 显示全部楼层
回复 5# ceoguang

假设是"InternetExplorer.Application",
组件类名 @ = "Internet Explorer(Ver 1.0)"
服务路径 LocalServer32 = "C:\Program Files\Internet Explorer\iexplore.exe"


先在All Objects中找到相应的组件类名 Internet Explorer(Ver 1.0)


然后再IDspatch->view.这样子查找对吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-3-29 14:22:26 | 显示全部楼层
熟悉的话你想怎么整就怎么整。^_^
如果不熟悉,最快的方法是直接载入模块查看.
当然,你得先知道接口在那个DLL或控件上
 楼主| 发表于 2011-3-29 15:01:25 | 显示全部楼层
回复 7# ceoguang

您帮了大忙了,谢谢.
 楼主| 发表于 2011-4-17 12:57:59 | 显示全部楼层
本帖最后由 easefull 于 2011-5-2 10:18 编辑

总结:

首先查找注册表,查找对象的类别名"Shell.Application",会发现
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\VersionIndependentProgID]
@="Shell.Application"

于是,
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}]
@="Shell Automation Service"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\InProcServer32]
@=%SystemRoot%\system32\SHELL32.dll

然后在oleview有两个方法:
一个是直接打开dll文件
另一个就是从All Objects里面找到"Shell Automation Service",然后"IDispatch" -> "view"

评分

参与人数 1金钱 +10 收起 理由
user3000 + 10

查看全部评分

 楼主| 发表于 2011-5-2 10:45:22 | 显示全部楼层
本帖最后由 easefull 于 2011-5-2 11:20 编辑

已知对象句柄,查询该对象的属性的方法一:

例子:
$o = ObjCreate("Shell.Application")
$sResult = ObjName($o, 1)
ClipPut($sResult)
MsgBox(0, "对象描述", $sResult)
--------------------------------------------------------------
ObjName查询结果:
ObjName($oDoc, 1)        = IShellDispatch4
ObjName($oDoc, 2)        = Chr(00)
ObjName($oDoc, 3)        = Chr(00)
ObjName($oDoc, 4)        = Chr(00)
ObjName($oDoc, 5)        = Chr(00)
---------------------------------------------------------------
注册表搜索"IShellDispatch4"发现
[HKEY_CLASSES_ROOT\Interface\{EFD84B2D-4BCF-4298-BE25-EB542A59FBDA}]
@="IShellDispatch4"
得到
[HKEY_CLASSES_ROOT\Interface\{EFD84B2D-4BCF-4298-BE25-EB542A59FBDA}\TypeLib]
@="{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}"
---------------------------------------------------------------
注册表搜索"{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}"发现
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\TypeLib]
@="{50a7e9b0-70ef-11d1-b75a-00a0c90564fe}"
得到
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}]
此为对象的显示名称@="Shell Automation Service"
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\InProcServer32]
此为对象调用的dll@="%SystemRoot%\system32\SHELL32.dll"
---------------------------------------------------------------
OLEVIEW查询操作:
打开oleview.exe                ->        All Objects        ->        Shell Automation Service
右键"IDispatch"                ->        "view
---------------------------------------------------------------
注:
此法查询对象"HTML Document"会查到错误的信息,具体请对比方法二.
 楼主| 发表于 2011-5-2 10:55:24 | 显示全部楼层
本帖最后由 easefull 于 2011-5-2 11:27 编辑

已知对象句柄,查询该对象的属性的方法二:

例子,获取IE的相关文档对象属性.
#include <IE.au3>
$oIE  = _IECreate ("http://www.126.com")
$oDoc = _IEDocGetObj ($oIE)
$sResult = ObjName($oDoc, 2)
ClipPut($sResult)
MsgBox(0, "对象描述", $sResult)
---------------------------------------------------------------
ObjName查询结果:
ObjName($oDoc, 1)        DispHTMLDocument
ObjName($oDoc, 2)        HTML Document
ObjName($oDoc, 3)        htmlfile
ObjName($oDoc, 4)        %SystemRoot%\system32\mshtml.dll
ObjName($oDoc, 5)        Chr(00)
---------------------------------------------------------------
注册表搜索"HTML Document"发现
[HKEY_CLASSES_ROOT\htmlfile]
@="HTML Document"
得到:
[HKEY_CLASSES_ROOT\htmlfile\CLSID]
@={25336920-03F9-11cf-8FD0-00AA00686F13}
---------------------------------------------------------------
[HKEY_CLASSES_ROOT\CLSID\{25336920-03F9-11cf-8FD0-00AA00686F13}]
此为对象的显示名称@=HTML Document
[HKEY_CLASSES_ROOT\CLSID\{25336920-03F9-11cf-8FD0-00AA00686F13}\ProgID]
ObjName($oDoc, 3)和这个值相同,但并不是取于此键值@=htmlfile
[HKEY_CLASSES_ROOT\CLSID\{25336920-03F9-11cf-8FD0-00AA00686F13}\InProcServer32]
和ObjName($oDoc, 4)和这个值相同,但并不是取于此键值@=%SystemRoot%\system32\mshtml.dll
---------------------------------------------------------------
OLEVIEW查询操作:
打开oleview.exe                ->        All Objects        ->        HTML Document
右键"IDispatch"                ->        "view
---------------------------------------------------------------
注:
[HKEY_CLASSES_ROOT\CLSID\{25336920-03F9-11cf-8FD0-00AA00686F13}\ProgID]
[HKEY_CLASSES_ROOT\CLSID\{25336920-03F9-11cf-8FD0-00AA00686F13}\InProcServer32]
这两个键的@值和ObjName($oDoc, 3)、ObjName($oDoc, 4)的值相同,但ObjName并不是从这两个键值获取的信息.

判断根据:对象"Shell Automation Service"(详见方法一)也存在这两个键值,但ObjName获取3.4却返回空值.

评分

参与人数 1威望 +5 金钱 +30 贡献 +5 收起 理由
pusofalse + 5 + 30 + 5

查看全部评分

发表于 2011-5-16 11:51:55 | 显示全部楼层
收获不少,收藏备用~~
发表于 2011-6-8 18:03:27 | 显示全部楼层
很有技术含量....现在看不懂..先收藏着
发表于 2011-9-4 23:49:48 | 显示全部楼层
还不是很理解,不过先收藏着,再研究!
发表于 2012-2-21 16:54:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-19 10:20 , Processed in 0.086498 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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