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

StackOverflow https://stackoverflow.com/questions/3940498

  •  30-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение 4

Для записи я закончил написать очень маленький сценарий, используя Scite4autohotkey. а также AutoHotkey Com Wrappers, нет .NET не требуется.
(И мои неожиданные результаты не были неисправностью Python :))

Другие советы

На самом деле я на самом деле написал замену для SDK Tool OLEVIEW (AFAIK, он не поддерживает методы вызова только перечисление) UniMaginaniance leeviewdotnet. Вы можете получить исходный код здесь Но, как вам нужно скомпилировать, скорее всего, будет быстрее написать простую программу C # или использовать PowerShell.

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

object information

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

enter image description here

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

Если вы скачаете Windows SDK Через веб-сайт вы должны быть в состоянии просто загрузить инструменты SDK. Они включают в себя программу под названием OLE / COM Viewer (OLEView.exe), которые можно использовать для просмотра всех зарегистрированных объектов COM, а также для объектов, которые поддерживают автоматизацию OLE, откройте их и вызывают методы.

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

Получить список всех доступных объектов COM Опубликовано Jaap Babyer 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 Classe, а затем проверяет, если следующие два условия верны:

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

    Accccccccccmgr.accclientDocmgr.
    Acciscentionary.Acccdictionary.
    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 Script:

http://gallery.technet.microsoft.com/get-comobject-function-to-50a92047.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top