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 #)

Était-ce utile?

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 à:

 informations sur l'objet

puis sélectionnez le menu « Opérations » en bas et choisissez « Ouvrir Dispatch » pour obtenir la fenêtre méthode / propriété.

 entrer image description ici

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.ADEFile

  •   
     

Pour 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top