我正在尝试使用Python中的COM对象(win32com)来自动化进程,但是我没有得到预期的结果......是否有工具来探索/测试COM对象而无需编写特定的程序?我的意思是,有什么东西允许,例如,实例化COM对象并调用其方法?
(基本上我试图找出我的意外结果是否是win32com的错,我想避免安装Visual Studio来编写C#应用程序)
答案 0 :(得分:12)
如果您通过WebSetup下载Windows SDK,您应该可以选择只下载SDK工具。它们包括一个名为Ole / COM Viewer(oleview.exe)的程序,可用于浏览所有已注册的COM对象,以及支持Ole Automation的对象,打开它们并调用方法。
答案 1 :(得分:12)
我实际上写了一个替代SDK工具OleView(afaik它不支持仅枚举的调用方法),简单地称为OleViewDotNet。您可以获取源代码here,但是由于您需要编译它,编写简单的C#程序或使用Powershell可能会更快。
它所做的是通过GUI公开IDispatch方法(和一些本机接口),以便您可以调用它们,它还提供了一个IronPython脚本窗口。您需要通过查看“注册表 - > CLSID按名称”查找您的COM对象,找到条目(过滤器可用于按名称部分选择)右键单击并选择应显示的“创建实例”窗口类似于:
然后选择底部的“Operations”菜单并选择“Open Dispatch”以获取方法/属性窗口。
你可以做更多的事情,但这是一个简单的概述。
答案 2 :(得分:7)
我在PowerShell中探索COM对象。找到了由Jaap Brasser提供的这个很棒的recipe,它很容易运行并回答了我的问题。
获取所有可用Com对象的列表由Jaap Brasser于2013年6月27日发布
注意:此提示需要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
答案 3 :(得分:-2)
为了记录,我最终使用SciTe4AutoHotKey和AutoHotKey COM wrappers编写了一个非常小的脚本,不需要.Net。 (我意想不到的结果不是Python的错误:))