¿Existe una herramienta para explorar / pruebas de objetos COM?
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 #)
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:
a continuación, seleccione el menú "Operaciones" en la parte inferior y elija "Abrir Dispatch" para obtener la ventana método / propiedad.
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.ADEFilePara 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