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

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

有帮助吗?

解决方案 4

为了记录,我最终使用了一个很小的脚本 Scite4autohotkeyAutohotkey com包装器, ,不需要.NET。
(而且我的意外结果不是Python的错:))

其他提示

实际上,我写了一个替代SDK工具Oleview(AFAIK,它不支持仅列举列举的方法),毫无想象地称为OleviewDotnet。您可以获取源代码 这里 但是,由于您需要编译,因此编写简单的C#程序或使用PowerShell可能会更快。

它要做的是通过GUI揭示IDISPATCH方法(以及某些本机接口),因此您可以调用它们,并且还提供了Ironpython脚本窗口。您需要通过在“注册表 - > clsid by Name”下查看COM对象,找到条目(可以使用过滤器按名称部分选择)右键单击,然后选择“创建实例”,以显示窗口如同:

object information

然后在底部选择“操作”菜单,然后选择“打开调度”以获取方法/属性窗口。

enter image description here

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

如果您下载 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top