我试图通过使用Python的COM对象(win32com)自动化一个进程,但我没有得到预期的结果…有没有一个工具来探索/testingCOM对象,而不必写一个特定的程序? 我的意思是,是否有东西,允许例如一个COM对象,并调用其方法?
(基本上我试图找出,如果我意想不到的结果是win32com的错,我想避免安装Visual Studio编写一个C#应用程序)
如果您通过WebSetup下载Windows SDK ,则应该可以选择只下载SDK工具。 它们包括一个名为Ole / COM Viewer(oleview.exe)的程序,可以用来浏览所有已注册的COM对象,以及支持Ole Automation的对象,打开它们并调用方法。
我实际上写了一个替代SDK工具OleView(afaik它不支持调用方法只枚举)unimaginatively调用OleViewDotNet。 你可以在这里得到源代码,但是如果你需要编译它的话,编写简单的C#程序或者使用Powershell可能会更快。
它所做的是通过GUI公开IDispatch方法(以及一些本地接口),以便您可以调用它们,并且还提供一个IronPython脚本窗口。 你需要通过在“Registry – > CLSID By Name”下找到你的COM对象,找到条目(过滤器可以用来选择名称部分)右键单击并选择应该显示一个窗口的“Create Instance”如同:
然后选择底部的“操作”菜单并选择“打开调度”以获取方法/属性窗口。
你可以用这个做更多的事情,但这只是一个简单的概述。
我正在探索PowerShell中的COM对象。 发现这个由Jaap Brasser提供的好方法 ,它很容易运行并回答了我的问题。
获取所有可用Com对象的列表 2013年6月27日由Jaap Brasser发布
注意:此提示需要PowerShell 2.0或更高版本。
最近在PowerShell.com论坛上发布了一个问题:如何获得可用ComObjects的完整列表? 这个技巧将显示如何从注册表中获取所有这些信息。
这里是我们可以用来生成这个列表的代码:
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 \ Classes中读出完整的值列表,然后验证以下两个条件是否成立:
- 该对象是否符合ComObject的命名约定?
该注册表项是否有一个CLSID文件夹? 每个注册的ComObject都应该有一个CLSID作为唯一的标识符。 此命令生成的输出示例如下所示:
AccClientDocMgr.AccClientDocMgr
AccDictionary.AccDictionary
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
为了记录,我最终写了一个使用SciTe4AutoHotKey和AutoHotKey COM包装器的非常小的脚本,不需要.Net。
(和我意想不到的结果是不是Python的错:))