windows 是否有一个工具来探索/测试COM对象?

bt1cpqcv  于 2023-06-24  发布在  Windows
关注(0)|答案(4)|浏览(147)

我试图通过使用Python中的COM对象(win32 com)来自动化一个流程,但我没有得到预期的结果。有没有一种工具可以在不编写特定程序的情况下探索/测试COM对象?我的意思是,有没有什么东西可以让例如。示例化COM对象并调用它的方法?
(基本上我试图找出我的意外结果是否是win32 com的错,我想避免安装Visual Studio来编写C#应用程序)

ffdz8vbo

ffdz8vbo1#

实际上,我编写了一个SDK工具OleView的替代品(因为它不支持仅枚举调用方法),没有想象力地称为OleViewDotNet。你可以得到源代码here或发布here
它所做的是通过GUI公开IDispatch方法(和一些本机接口),以便您可以调用它们,它还提供了一个IronPython脚本窗口。您需要通过在“注册表-> CLSID按名称”下查找您的COM对象,找到条目(过滤器可用于按名称部分选择)右键单击并选择“创建示例”,该窗口应显示类似于:

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

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

ar7v8xwq

ar7v8xwq2#

如果您通过WebSetup下载Windows SDK,您应该可以选择只下载SDK工具。它们包括一个名为Ole/COM查看器(oleview.exe)的程序,该程序可用于浏览所有注册的COM对象,并打开支持Ole Automation的对象并调用方法。

3xiyfsfu

3xiyfsfu3#

我正在探索PowerShell中的COM对象。找到了这个很棒的recipe,由Jaap Brasser提供,很容易运行,回答了我的问题。

Get a list of all Com objects availablePosted by Jaap Brasser on 2013年6月27日

注意:本技巧需要PowerShell 2.0或更高版本。
最近在www.example.com论坛上发布了一个问题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

ruarlubt

ruarlubt4#

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

相关问题