easefull 发表于 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的属性(这个是叫对象的属性吧)?

ceoguang 发表于 2011-3-28 16:33:12

oleview

easefull 发表于 2011-3-28 16:38:00

回复 2# ceoguang


是注册表找到这个"shell.application"对应的LocalServer32值.然后使用oleview打开相应的dll来查看吗?
但如果LocalServer32的值不是dll呢,比如"InternetExplorer.Application"
再像"Word.Application"之类的甚至是 exe加参数.那该怎么办?

ceoguang 发表于 2011-3-28 22:27:38

直接打开oleview看看就知道了

ceoguang 发表于 2011-3-29 09:17:20




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

easefull 发表于 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.这样子查找对吗?

ceoguang 发表于 2011-3-29 14:22:26

熟悉的话你想怎么整就怎么整。^_^
如果不熟悉,最快的方法是直接载入模块查看.
当然,你得先知道接口在那个DLL或控件上

easefull 发表于 2011-3-29 15:01:25

回复 7# ceoguang

您帮了大忙了,谢谢.

easefull 发表于 2011-4-17 12:57:59

本帖最后由 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 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"发现

@="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 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"发现

@="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却返回空值.

annybaby 发表于 2011-5-16 11:51:55

收获不少,收藏备用~~

suiyefeng 发表于 2011-6-8 18:03:27

很有技术含量....现在看不懂..先收藏着

binshiwo 发表于 2011-9-4 23:49:48

还不是很理解,不过先收藏着,再研究!

fan798304 发表于 2012-2-21 16:54:05

{:face (270):}{:face (382):}{:face (361):}
页: [1] 2
查看完整版本: [已解决]已知对象的类名称,怎么样查询对象拥有的属性.