题
我正在尝试通过使用Python(Win32COM)的COM对象来自动化过程,但是我没有得到预期的结果...是否有工具可以探索/测试COM对象而无需编写特定程序?我的意思是,是否有一些允许EG实例化对象并调用其方法的东西?
(基本上,我正在尝试找出我的意外结果是否是Win32com的错,我想避免安装Visual Studio编写C#应用程序)
解决方案 4
为了记录,我最终使用了一个很小的脚本 Scite4autohotkey 和 Autohotkey com包装器, ,不需要.NET。
(而且我的意外结果不是Python的错:))
其他提示
实际上,我写了一个替代SDK工具Oleview(AFAIK,它不支持仅列举列举的方法),毫无想象地称为OleviewDotnet。您可以获取源代码 这里 但是,由于您需要编译,因此编写简单的C#程序或使用PowerShell可能会更快。
它要做的是通过GUI揭示IDISPATCH方法(以及某些本机接口),因此您可以调用它们,并且还提供了Ironpython脚本窗口。您需要通过在“注册表 - > clsid by Name”下查看COM对象,找到条目(可以使用过滤器按名称部分选择)右键单击,然后选择“创建实例”,以显示窗口如同:
然后在底部选择“操作”菜单,然后选择“打开调度”以获取方法/属性窗口。
您可以做更多的事情,但这是一个简单的概述。
如果您下载 Windows SDK 通过WebSetup,您应该能够选择仅下载SDK工具。它们包括一个名为OLE/COM查看器(Oleview.exe)的程序,可用于浏览所有注册的COM对象,以及用于支持Ole Automation,打开它们并调用方法的对象。
我正在PowerShell中探索COM对象。发现这很棒 食谱, ,由JAAP Brasser提供,这很容易运行并回答我的问题。
获取所有可用对象的列表 JAAP Brasser发表于2013年6月27日
注意:此提示需要PowerShell 2.0或更高。
最近,在Powershell.com论坛上发布了一个问题:如何获取可用的comobject的完整列表?本提示将显示如何从注册表中获取所有这些。
这是我们可以用来生成此列表的代码:
Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID") } | Select-Object -ExpandProperty PSChildName
第一个CMDLET读取了HKLM: Software class的完整值列表,然后验证以下两个条件是否为:
- 该对象是否匹配comObject的命名约定?
注册表密钥是否具有CLSID文件夹?每个注册的ComObject都应将CLSID作为唯一标识符。该命令生成的输出的一个示例如下:
accclientDocmgr.accclientdocmgr
Accdictionary.Acdictionary
Access.accdaextension
Access.accdcfile
Access.accdefile
Access.accdtfile
Access.accftfile
Access.Adefile为了使发现comobject的过程更容易,可以使用以下功能。
function Get-ComObject { param( [Parameter(Mandatory=$true, ParameterSetName='FilterByName')] [string]$Filter, [Parameter(Mandatory=$true, ParameterSetName='ListAllComObjects')] [switch]$ListAll ) $ListofObjects = Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID") } | Select-Object -ExpandProperty PSChildName if ($Filter) { $ListofObjects | Where-Object {$_ -like $Filter} } else { $ListofObjects } }
此功能可在Technet脚本库中获得:
http://gallery.technet.microsoft.com/get-comobject-function-to-50a92047