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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

информация об объекте

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

введите описание изображения здесь

Там вы можете сделать гораздо больше, но это простой обзор.

Ответ 4

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

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

Примечание. Этот совет требует PowerShell 2.0 или выше.

Недавно на форумах PowerShell.com был опубликован вопрос: как получить полный список доступных ComObjects? Этот совет покажет, как выборка все из реестра.

Вот код, который мы можем использовать для создания этого списка:

  Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Где-объект {  $ _. 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
    Access.ACCDTFile
    Access.ACCFTFile
    Access.ADEFile

Чтобы упростить процесс обнаружения ComObject, выполните следующие действия. функция может быть использована.

  функция Get-ComObject {
   пары (       [Параметр (Обязательные = $верно,       ParameterSetName = 'FilterByName')]       [Строка] $Фильтр,
       [Параметр (Обязательные = $верно,       ParameterSetName = 'ListAllComObjects')]       [Ключ] $ListAll   )
   $ ListofObjects = Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Где-объект {       $ _. PSChildName -match '^\w + \.\W + $' -and (Test-Path -Path  "$ ($ _. PSPath)\CLSID" )   } | Select-Object -ExpandProperty PSChildName
   if ($ Filter) {       $ ListofObjects | Where-Object {$ _ -like $Filter}   } else {       $ СПИСОК_ОБЪЕКТОВ   }
}
Код>

Эта функция доступна в галерее TechNet Script:

http://gallery.technet.microsoft.com/Get- ComObject-Function к 50a92047