我试图通过使用Python中的COM对象(win32 com)来自动化一个流程,但我没有得到预期的结果。有没有一种工具可以在不编写特定程序的情况下探索/测试COM对象?我的意思是,有没有什么东西可以让例如。示例化COM对象并调用它的方法?(基本上我试图找出我的意外结果是否是win32 com的错,我想避免安装Visual Studio来编写C#应用程序)
ffdz8vbo1#
实际上,我编写了一个SDK工具OleView的替代品(因为它不支持仅枚举调用方法),没有想象力地称为OleViewDotNet。你可以得到源代码here或发布here。它所做的是通过GUI公开IDispatch方法(和一些本机接口),以便您可以调用它们,它还提供了一个IronPython脚本窗口。您需要通过在“注册表-> CLSID按名称”下查找您的COM对象,找到条目(过滤器可用于按名称部分选择)右键单击并选择“创建示例”,该窗口应显示类似于:
然后选择底部的“操作”菜单并选择“打开调度”以获得方法/属性窗口。
你可以用这个做很多事情,但这只是一个简单的概述。
ar7v8xwq2#
如果您通过WebSetup下载Windows SDK,您应该可以选择只下载SDK工具。它们包括一个名为Ole/COM查看器(oleview.exe)的程序,该程序可用于浏览所有注册的COM对象,并打开支持Ole Automation的对象并调用方法。
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中读取一个完整的值列表,然后验证以下两个条件是否为真:
AccClientDocMgr.AccClientDocMgrAccDictionary.AccDictionaryAccess.ACCDAExtensionAccess.ACCDCFileAccess.ACCDEFileAccess.ACCDTFileAccess.ACCFTFileAccess.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
ruarlubt4#
为了记录在案,我最终使用SciTe4AutoHotKey和AutoHotKey COM wrappers编写了一个非常小的脚本,不需要.Net。(and我的意外结果不是Python的错:))
4条答案
按热度按时间ffdz8vbo1#
实际上,我编写了一个SDK工具OleView的替代品(因为它不支持仅枚举调用方法),没有想象力地称为OleViewDotNet。你可以得到源代码here或发布here。
它所做的是通过GUI公开IDispatch方法(和一些本机接口),以便您可以调用它们,它还提供了一个IronPython脚本窗口。您需要通过在“注册表-> CLSID按名称”下查找您的COM对象,找到条目(过滤器可用于按名称部分选择)右键单击并选择“创建示例”,该窗口应显示类似于:
然后选择底部的“操作”菜单并选择“打开调度”以获得方法/属性窗口。
你可以用这个做很多事情,但这只是一个简单的概述。
ar7v8xwq2#
如果您通过WebSetup下载Windows SDK,您应该可以选择只下载SDK工具。它们包括一个名为Ole/COM查看器(oleview.exe)的程序,该程序可用于浏览所有注册的COM对象,并打开支持Ole Automation的对象并调用方法。
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的完整列表?这篇技巧文章将展示如何从注册表中获取所有这些。
下面是我们可以用来生成这个列表的代码:
第一个Cmdlet从HKLM:\Software\Classes中读取一个完整的值列表,然后验证以下两个条件是否为真:
AccClientDocMgr.AccClientDocMgr
AccDictionary.AccDictionary
Access.ACCDAExtension
Access.ACCDCFile
Access.ACCDEFile
Access.ACCDTFile
Access.ACCFTFile
Access.ADEFile
为了使发现ComObject的过程更容易,可以使用以下函数。
此函数在TechNet脚本库中提供:
http://gallery.technet.microsoft.com/Get-ComObject-Function-to-50a92047
ruarlubt4#
为了记录在案,我最终使用SciTe4AutoHotKey和AutoHotKey COM wrappers编写了一个非常小的脚本,不需要.Net。
(and我的意外结果不是Python的错:))