Y at-il un outil pour explorer / tester les objets COM?
Question
Je suis en train d'automatiser un processus à l'aide d'un objet COM à partir de Python (win32com), mais je ne suis pas d'obtenir les résultats attendus ... Y at-il un outil pour explorer / test des objets COM sans avoir à écrire un particulier programme? Je veux dire, est-il quelque chose qui permet par exemple pour instancier un objet COM et appeler ses méthodes?
(En fait, je suis en train de vérifier si mes résultats inattendus sont la faute de win32com, et je voudrais éviter d'installer Visual Studio pour écrire une application C #)
La solution 4
Pour mémoire, je fini par écrire un script très petit en utilisant SciTe4AutoHotKey et AutoHotKey COM wrappers , aucun .Net nécessaire.
(Et mes résultats inattendus ne sont pas la faute de Python :))
Autres conseils
J'ai écrit en fait un remplacement pour l'outil SDK OleView (afaik il ne supporte pas l'appel des méthodes que l'énumération) unimaginatively appelé OleViewDotNet. Vous pouvez obtenir le code source mais comme vous auriez besoin de compiler il est probable que ce serait plus rapide à écrire le programme simple C # ou utilisez Powershell.
Ce qu'il fait est d'exposer les méthodes IDispatch (et certaines interfaces natives) via une interface graphique afin que vous puissiez les appeler et il fournit également une fenêtre de script IronPython. Vous auriez besoin de trouver votre objet COM en regardant sous « Registre -> CLSID Par nom », recherchez l'entrée (le filtre peut être utilisé pour sélectionner par une partie du nom) Faites un clic droit et sélectionnez « Créer instance » qui devrait afficher une fenêtre similaire à:
puis sélectionnez le menu « Opérations » en bas et choisissez « Ouvrir Dispatch » pour obtenir la fenêtre méthode / propriété.
Il y a beaucoup plus que vous pouvez faire avec cela, mais c'est une vue d'ensemble simple.
Si vous téléchargez le SDK Windows via le WebSetup, vous devriez être en mesure de choisir de simplement télécharger les outils SDK. Ils comprennent que l'on peut utiliser un programme appelé Ole / COM Viewer (Oleview.exe) pour parcourir tous les objets COM enregistrés, et pour les objets que le soutien Ole Automation, les ouvrir et appeler des méthodes.
J'explore des objets COM dans PowerShell. Trouvé cette grande recette , fourni par Jaap Brasser, qui est facile à exécuter et a répondu à ma question.
Obtenir une liste de tous les objets COM disponibles Publié par Jaap Brasser le 27 Juin 2013
Note:. Cette astuce nécessite PowerShell 2.0 ou supérieur
Récemment, une question a été publiée sur les forums PowerShell.com: Comment obtenir une liste complète des ComObjects disponibles? Cette astuce va montrer comment chercher tous du registre.
Voici le code que nous pouvons utiliser pour générer cette liste:
Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID") } | Select-Object -ExpandProperty PSChildName
Le premier Cmdlet lit une liste complète des valeurs de HKLM: \ Software \ Classes puis vérifie si les deux suivants conditions sont remplies:
- Est-ce que l'objet correspond la convention de nommage pour un ComObject?
La clé de Registre ont un dossier CLSID? Chaque ComObject enregistré devrait avoir un CLSID comme identifiant unique. Un exemple de la sortie générée par cette commande est le suivant:
AccClientDocMgr.AccClientDocMgr
AccDictionary.AccDictionary
Access.ACCDAExtension
Access.ACCDCFile
Access.ACCDEFile
Access.ACCDTFile
Access.ACCFTFile
Access.ADEFilePour rendre le processus de découverte ComObject plus facile ce qui suit fonction peut être utilisée.
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 } }
Cette fonction est disponible dans la galerie Script TechNet:
http://gallery.technet.microsoft.com/Get- ComObject-Fonction-à-50a92047