Is there a tool for exploring/testing COM objects?

前端 未结 4 1597
轻奢々
轻奢々 2020-12-05 11:16

I\'m trying to automate a process by using a COM object from Python (win32com), but I\'m not getting the expected results... Is there a tool to explore/test COM objects with

相关标签:
4条回答
  • 2020-12-05 11:26

    If you download the Windows SDK via the WebSetup you should be able to choose to just download the SDK tools. They include a program called Ole/COM Viewer (oleview.exe) that can be used to browse all registered COM objects, and for objects that support Ole Automation, open them and invoke methods.

    0 讨论(0)
  • 2020-12-05 11:28

    I am exploring COM objects in PowerShell. Found this great recipe, provided by Jaap Brasser, which is easy to run and answered my question.

    Get a list of all Com objects available Posted by Jaap Brasser on June 27, 2013

    Note: This tip requires PowerShell 2.0 or above.

    Recently a question was posted on the PowerShell.com forums: How to get a full list of available ComObjects? This tip will show how fetch all of them from the registry.

    Here is the code that we can use to generate this list:

    Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object {
       $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID")
    } | Select-Object -ExpandProperty PSChildName
    

    The first Cmdlet reads out a complete list of values from HKLM:\Software\Classes and then verifies if the following two conditions are true:

    • Does the object match the naming convention for a ComObject?
    • Does the registry key have a CLSID folder? Every registered ComObject should have a CLSID as a unique identifier. An example of the output generated by this command is as follows:

      AccClientDocMgr.AccClientDocMgr
      AccDictionary.AccDictionary
      Access.ACCDAExtension
      Access.ACCDCFile
      Access.ACCDEFile
      Access.ACCDTFile
      Access.ACCFTFile
      Access.ADEFile

    To make the process of discovering ComObject easier the following function can be used.

    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
        }
    }
    

    This function is available in the TechNet Script Gallery:

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

    0 讨论(0)
  • 2020-12-05 11:31

    For the record, I ended up writing a very small script using SciTe4AutoHotKey and AutoHotKey COM wrappers, no .Net required.
    (and my unexpected results weren't Python's fault :) )

    0 讨论(0)
  • 2020-12-05 11:48

    I actually wrote a replacement for the SDK tool OleView (afaik it doesn't support calling methods only enumerating) unimaginatively called OleViewDotNet. You can get the source code here but as you'd need to compile it's likely it would be quicker to write the simple C# program or use Powershell.

    What it does do is expose IDispatch methods (and some native interfaces) via a GUI so you can call them and it also provides an IronPython script window. You'd need to find your COM object by looking under "Registry -> CLSID By Name", find the entry (the filter can be used to select by name part) right click and select "Create Instance" that should show up a window similar to:

    then select the "Operations" menu at the bottom and choose "Open Dispatch" to get the method/property window.

    There's a lot more you can do with this but that's a simple overview.

    0 讨论(0)
提交回复
热议问题