Frage

Ich bin durch die Verwendung eines COM-Objekts aus Python einen Prozess zu automatisieren versucht (win32com), aber ich bin nicht die erwarteten Ergebnisse zu erzielen ... Gibt es ein Tool zu erkunden / Test COM-Objekte ohne einen bestimmten schreiben Programm? Ich meine, es ist etwas, das zum Beispiel erlaubt ein COM-Objekt zu instanziiert und seine Methoden aufrufen?

(Im Grunde versuche ich herauszufinden, ob meine unerwarteten Ergebnisse win32com Schuld sind, und ich mag Visual Studio vermeiden, die Installation eine C # -Anwendung zu schreiben)

War es hilfreich?

Lösung 4

Für das Protokoll, ich am Ende ein sehr kleines Skript zu schreiben, mit SciTe4AutoHotKey und AutoHotKey COM-Wrapper , benötigt kein .Net.
(Und meine unerwarteten Ergebnisse waren nicht Python schuld :))

Andere Tipps

Ich schrieb tatsächlich einen Ersatz für die SDK-Tool OleView (afaik nicht Aufrufe von Methoden unterstützt das Aufzählen nur) unimaginatively OleViewDotNet genannt. Sie können den Quellcode erhalten hier aber wie Sie es wahrscheinlich zu kompilieren brauchen würde, um es wäre schneller zu schreiben die einfache C # Programm oder Powershell verwenden.

Was sie tut, ist do IDispatch Methoden (und einige native Schnittstellen) über eine GUI belichten, damit Sie sie anrufen und sie stellt auch ein Skript Ironpython Fenster. Sie müssen, indem Sie unter COM-Objekt finden „Registry -> CLSID nach Namen“ finden Sie den Eintrag (die Filter verwendet werden können, namentlich Teil wählen) die rechte Maustaste und wählen Sie „Create Instance“, die ein Fenster auftauchen sollten ähnlich wie:

 Objektinformationen

wählen Sie dann die „Operationen“ Menü unten und wählen Sie „Öffnen Versand“, um die Methode / Eigenschaft Fenster.

 image description hier

eingeben

Es gibt viel mehr Sie dies tun können, aber das ist eine einfache Übersicht.

Wenn Sie zum Download der Windows SDK über die WebSetup sollten Sie in der Lage sein zu wählen, um die SDK-Tools herunterladen. Dazu gehören ein Programm namens OLE / COM-Viewer (Oleview.exe), die verwendet werden können alle registrierten COM-Objekte zu durchsuchen, und für Objekte, die Unterstützung Ole Automation, öffnen sie und Methoden aufrufen.

erforsche ich COM-Objekte in Powershell. Fand dieses großen Rezept , zur Verfügung gestellt von Jaap Brasser, die einfach zu laufen und beantwortet meine Frage.

  

Hier finden Sie eine Liste aller COM-Objekte zur Verfügung: Veröffentlicht von Jaap Brasser am 27. Juni 2013

     

. Hinweis: Dieser Tipp erfordert Powershell 2.0 oder höher

     

Vor kurzem wurde eine Frage wurde auf den PowerShell.com Foren gepostet: Wie   erhalten eine vollständige Liste der verfügbaren ComObjects? Dieser Tipp zeigt, wie holen   alle von ihnen aus der Registrierung.

     

Hier ist der Code, dass wir diese Liste zu erzeugen, verwenden können:

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

Der erste Cmdlets liest eine vollständige Liste der Werte aus   HKLM: \ Classes Software \ und dann überprüft, wenn die beiden folgenden   Bedingungen erfüllt sind:

     
      
  • Ist das Objekt passen die Namenskonvention für eine ComObject?
  •   
  • Ist der Registrierungsschlüssel einen CLSID-Ordner haben? Jeder registrierte ComObject sollte eine CLSID als eindeutige Kennung haben. Ein Beispiel für   der Ausgang von diesem Befehl erzeugt wird, ist wie folgt:

         

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

  •   
     

Um den Prozess zu machen entdeckt ComObject einfacher, die folgenden   Funktion kann verwendet werden.

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

Diese Funktion ist in dem TechNet Script Gallery zur Verfügung:

     

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top