Есть ли инструмент для изучения / тестирования COM-объектов? - PullRequest
14 голосов
/ 15 октября 2010

Я пытаюсь автоматизировать процесс с помощью COM-объекта из Python (win32com), но я не получаю ожидаемых результатов ... Есть ли инструмент для исследования / тестирования COM-объектов без необходимости написания конкретного программа? Я имею в виду, есть ли что-то, что позволяет, например, создать экземпляр COM-объекта и вызвать его методы?

(В основном я пытаюсь выяснить, являются ли мои неожиданные результаты ошибкой win32com, и я бы хотел избежать установки Visual Studio для написания приложения на C #)

Ответы [ 4 ]

12 голосов
/ 22 марта 2017

Я на самом деле написал замену для инструмента SDK OleView (на самом деле он не поддерживает вызов только методов перечисления), который невообразимо называется OleViewDotNet.Вы можете получить исходный код здесь , но, поскольку вам нужно будет скомпилировать, скорее всего, будет проще написать простую программу на C # или использовать Powershell.

Что он делает, так это выставляет IDispatchметоды (и некоторые собственные интерфейсы) через графический интерфейс, так что вы можете вызывать их, а также предоставляет окно сценария IronPython.Вам нужно найти свой COM-объект, посмотрев в разделе «Реестр -> CLSID по имени», найдите запись (фильтр можно использовать для выбора по имени) щелкните правой кнопкой мыши и выберите «Создать экземпляр», который должен отобразить окноаналогично:

object information

, затем выберите меню «Операции» внизу и выберите «Открыть рассылку», чтобы открыть окно метода / свойства.

enter image description here

С этим можно многое сделать, но это простой обзор.

12 голосов
/ 15 октября 2010

Если вы загрузите Windows SDK через WebSetup, вы сможете просто загрузить инструменты SDK.Они включают программу Ole / COM Viewer (oleview.exe), которую можно использовать для просмотра всех зарегистрированных COM-объектов, а также для объектов, поддерживающих Ole Automation, их открытия и вызова методов.

7 голосов
/ 04 декабря 2015

Я изучаю COM-объекты в PowerShell.Нашел этот замечательный рецепт , предоставленный Jaap Brasser, который легко запустить и ответил на мой вопрос.

Получить список всех доступных объектов Com * Опубликованоот Jaap Brasser 27 июня 2013 г.

Примечание. Для этого совета требуется 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

Первый командлет считывает полный списокзначения из HKLM: \ Software \ Classes, а затем проверяет, выполняются ли следующие два условия:

  • Соответствует ли объект соглашению об именах для ComObject?
  • в разделе реестра есть папка CLSID?Каждый зарегистрированный ComObject должен иметь CLSID в качестве уникального идентификатора.Пример вывода, созданного этой командой, выглядит следующим образом:

    AccClientDocMgr.AccClientDocMgr
    AccDictionary.AccDictionary
    Access.ACCDAExtension
    Access.ACCDCFile
    Access.ACCDEFile
    Доступ.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

0 голосов
/ 20 октября 2010

Для записи я написал очень маленький скрипт, используя SciTe4AutoHotKey и AutoHotKey COM-оболочки , .Net не требуется.
(и мои неожиданные результаты не были ошибкой Питона :))

...