Pregunta

Estoy tratando de automatizar un proceso mediante el uso de un objeto COM desde Python (win32com), pero no estoy obteniendo los resultados esperados ... ¿Existe una herramienta para explorar / COM prueba de objetos sin tener que escribir una específica ¿programa? Es decir, ¿hay algo que permite, por ejemplo, crear una instancia de un objeto COM y llamar a sus métodos?

(Básicamente estoy tratando de averiguar si mis resultados inesperados son culpa de win32com, y me gustaría evitar la instalación de Visual Studio para escribir una aplicación de C #)

¿Fue útil?

Solución 4

Para el registro, terminé escribiendo un guión muy pequeña usando SciTe4AutoHotKey y AutoHotKey COM envoltorios , no requiere .Net.
(Y mis resultados inesperados no eran culpa de Python :))

Otros consejos

De hecho, me escribió un reemplazo para el Oleview herramienta SDK (que yo sepa que no soporta métodos de llamada única que enumeran) unimaginatively llama OleViewDotNet. Puede obtener el código fuente aquí sino como lo que se necesita para compilar lo más probable es que sería más rápido para escribir el sencillo programa C # o usar Powershell.

Lo que sí hace es exponer los métodos IDispatch (y algunas interfaces nativas) a través de una interfaz gráfica de usuario para que pueda llamar y también proporciona una ventana de script IronPython. Que había necesidad de encontrar su objeto COM mirando bajo "Registro -> CLSID Por Nombre", busque la entrada (el filtro se puede utilizar para seleccionar el nombre de la parte) haga clic derecho y seleccionar "Crear instancia" que debe aparecer una ventana similar a:

 información de objeto

a continuación, seleccione el menú "Operaciones" en la parte inferior y elija "Abrir Dispatch" para obtener la ventana método / propiedad.

 introducir descripción de la imagen aquí

Hay mucho más que puede hacer con esto, pero eso es una descripción simple.

Si descarga el SDK de Windows a través de WebSetup la que debe ser capaz de elegir sólo tiene que descargar las herramientas de SDK. Incluyen un programa llamado Ole Visor / COM (Oleview.exe) que se pueden utilizar para navegar por todos los objetos COM registrados, y para los objetos que el apoyo de automatización, abrirlos e invocar métodos.

Estoy explorando los objetos COM en PowerShell. Encontrado este gran href="http://www.powershellmagazine.com/2013/06/27/pstip-get-a-list-of-all-com-objects-available/" , proporcionado por Jaap Brasser, que es fácil de ejecutar y respondió a mi pregunta.

  

Obtener una lista de todos los objetos COM disponibles Publicado por Jaap Brasser el 27 de junio de 2013

     

Nota:. Esta punta requiere PowerShell 2.0 o superior

     

Recientemente una pregunta fue publicada en los foros PowerShell.com: Cómo   obtener una lista completa de los ComObjects disponibles? Esta clavija le mostrará cómo buscar a   todos ellos desde el registro.

     

Este es el código que se puede utilizar para generar esta lista:

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

El primer cmdlet lee en voz alta una lista completa de los valores de   HKLM: \ Software \ Classes y luego verifica si los dos siguientes   condiciones son verdaderas:

     
      
  • ¿Tiene el objeto coincida con la convención de nombres para un ComObject?
  •   
  • ¿La clave de registro tiene una carpeta CLSID? Cada ComObject registrada debe tener un CLSID como un identificador único. Un ejemplo de   la salida generada por este comando es como sigue:

         

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

  •   
     

Para hacer el proceso más fácil de descubrir ComObject la siguiente   función se puede utilizar.

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

Esta función está disponible en el guión Galería de TechNet:

     

http://gallery.technet.microsoft.com/Get- ComObject funciones-a-50a92047

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top