是否有用于探索/测试COM对象的工具?

时间:2010-10-15 08:09:06

标签: windows com oleview

我正在尝试使用Python中的COM对象(win32com)来自动化进程,但是我没有得到预期的结果......是否有工具来探索/测试COM对象而无需编写特定的程序?我的意思是,有什么东西允许,例如,实例化COM对象并调用其方法?

(基本上我试图找出我的意外结果是否是win32com的错,我想避免安装Visual Studio来编写C#应用程序)

4 个答案:

答案 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对象,找到条目(过滤器可用于按名称部分选择)右键单击并选择应显示的“创建实例”窗口类似于:

object information

然后选择底部的“Operations”菜单并选择“Open Dispatch”以获取方法/属性窗口。

enter image description here

你可以做更多的事情,但这是一个简单的概述。

答案 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)

为了记录,我最终使用SciTe4AutoHotKeyAutoHotKey COM wrappers编写了一个非常小的脚本,不需要.Net。 (我意想不到的结果不是Python的错误:))