Gibt es ein Tool für die Erkundung / Prüfung COM-Objekte?
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)
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:
wählen Sie dann die „Operationen“ Menü unten und wählen Sie „Öffnen Versand“, um die Methode / Eigenschaft Fenster.
eingebenEs 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.ADEFileUm 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