[已解决]已知对象的类名称,怎么样查询对象拥有的属性.
本帖最后由 easefull 于 2011-3-29 15:02 编辑比如,已知对象类名称"shell.application".$oShell = ObjCreate("shell.application") ; 获取窗口 Shell 对象
$oShellWindows=$oShell.windows ; 获取窗口 shell 集合物件怎么样才能知道"shell.application"下有几个像$oShell.windows的属性(这个是叫对象的属性吧)? oleview 回复 2# ceoguang
是注册表找到这个"shell.application"对应的LocalServer32值.然后使用oleview打开相应的dll来查看吗?
但如果LocalServer32的值不是dll呢,比如"InternetExplorer.Application"
再像"Word.Application"之类的甚至是 exe加参数.那该怎么办? 直接打开oleview看看就知道了
最后一张图里就有具体的接口调用方法. 回复 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.这样子查找对吗? 熟悉的话你想怎么整就怎么整。^_^
如果不熟悉,最快的方法是直接载入模块查看.
当然,你得先知道接口在那个DLL或控件上 回复 7# ceoguang
您帮了大忙了,谢谢. 本帖最后由 easefull 于 2011-5-2 10:18 编辑
总结:
首先查找注册表,查找对象的类别名"Shell.Application",会发现
@="Shell.Application"
于是,
@="Shell Automation Service"
@=%SystemRoot%\system32\SHELL32.dll
然后在oleview有两个方法:
一个是直接打开dll文件
另一个就是从All Objects里面找到"Shell Automation Service",然后"IDispatch" -> "view" 本帖最后由 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"发现
@="IShellDispatch4"
得到
TypeLib]
@="{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}"
---------------------------------------------------------------
注册表搜索"{50A7E9B0-70EF-11D1-B75A-00A0C90564FE}"发现
TypeLib]
@="{50a7e9b0-70ef-11d1-b75a-00a0c90564fe}"
得到
此为对象的显示名称@="Shell Automation Service"
此为对象调用的dll@="%SystemRoot%\system32\SHELL32.dll"
---------------------------------------------------------------
OLEVIEW查询操作:
打开oleview.exe -> All Objects -> Shell Automation Service
右键"IDispatch" -> "view
---------------------------------------------------------------
注:
此法查询对象"HTML Document"会查到错误的信息,具体请对比方法二. 本帖最后由 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"发现
@="HTML Document"
得到:
@={25336920-03F9-11cf-8FD0-00AA00686F13}
---------------------------------------------------------------
此为对象的显示名称@=HTML Document
ObjName($oDoc, 3)和这个值相同,但并不是取于此键值@=htmlfile
和ObjName($oDoc, 4)和这个值相同,但并不是取于此键值@=%SystemRoot%\system32\mshtml.dll
---------------------------------------------------------------
OLEVIEW查询操作:
打开oleview.exe -> All Objects -> HTML Document
右键"IDispatch" -> "view
---------------------------------------------------------------
注:
这两个键的@值和ObjName($oDoc, 3)、ObjName($oDoc, 4)的值相同,但ObjName并不是从这两个键值获取的信息.
判断根据:对象"Shell Automation Service"(详见方法一)也存在这两个键值,但ObjName获取3.4却返回空值. 收获不少,收藏备用~~ 很有技术含量....现在看不懂..先收藏着 还不是很理解,不过先收藏着,再研究! {:face (270):}{:face (382):}{:face (361):}
页:
[1]
2