Domanda

Sto cercando di automatizzare un processo utilizzando un oggetto COM da Python (win32com), ma io non sto ottenendo i risultati sperati ... Esiste uno strumento per esplorare / test oggetti COM, senza dover scrivere una specifica programma? Voglio dire, c'è qualcosa che permette per esempio creare un'istanza di un oggetto COM e chiamare i suoi metodi?

(Fondamentalmente sto cercando di scoprire se i miei risultati inaspettati sono colpa di win32com, e mi piacerebbe evitare di installare Visual Studio per scrivere un app C #)

È stato utile?

Soluzione 4

Per la cronaca, ho finito per scrivere un piccolo script utilizzando SciTe4AutoHotKey e AutoHotKey COM wrapper , non .Net richiesto.
(Ei miei risultati imprevisti non erano colpa di Python :))

Altri suggerimenti

In realtà ho scritto una sostituzione per l'OleView strumento SDK (per quanto ne so non supporta i metodi di chiamata solo l'enumerazione) chiamato unimaginatively OleViewDotNet. È possibile ottenere il codice sorgente qui ma come avresti bisogno di compilare in quanto è probabile che sarebbe stato più veloce di scrivere il programma o il semplice C # utilizzare PowerShell.

Quello che fa è esporre i metodi IDispatch (e alcune interfacce native) tramite un interfaccia grafica in modo da poterli chiamare e fornisce anche una finestra di script IronPython. Avresti bisogno di trovare l'oggetto COM, cercando alla voce "Registro -> CLSID per nome", trovare la voce (il filtro può essere usato per selezionare in base al nome parte) tasto destro del mouse e selezionare "Crea istanza", che dovrebbe mostrare una finestra simile a:

 informazioni oggetto

quindi selezionare il menu "Operazioni" in basso e scegliere "Open Invio" per ottenere la finestra di metodo / proprietà.

 entrare descrizione dell'immagine qui

C'è molto di più si può fare con questo, ma questa è una panoramica semplice.

Se si scarica il SDK di Windows via il WebSetup si dovrebbe essere in grado di scegliere di scaricare solo gli strumenti SDK. Essi comprendono un programma chiamato Ole / COM Viewer (Oleview.exe) che può essere utilizzato per navigare tutti gli oggetti COM registrati, e per gli oggetti che supportano OLE Automation, loro e richiamare i metodi aprono.

sto esplorando oggetti COM in PowerShell. Trovato questa grande , fornito da Jaap Brasser, che è facile da eseguire e ha risposto alla mia domanda.

  

Ottenere un elenco di tutti gli oggetti COM disponibili Inviato da Jaap Brasser il 27 Giugno 2013

     

. Nota: Questo suggerimento richiede PowerShell 2.0 o superiore

     

Recentemente una domanda è stato pubblicato sul forum di PowerShell.com: come   ottenere una lista completa dei ComObjects disponibili? Questo suggerimento mostrerà come recuperare   tutti loro dal Registro di sistema.

     

Ecco il codice che possiamo usare per generare questa lista:

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

La prima Cmdlet legge un elenco completo di valori da   HKLM: \ Software \ Classes e poi verifica se la seguente due   condizioni sono vere:

     
      
  • Il l'oggetto corrisponde alla convenzione di denominazione per un ComObject?
  •   
  • La chiave di registro dispone di una cartella CLSID? Ogni ComObject registrato dovrebbe avere un CLSID come un identificatore univoco. Un esempio di   l'output generato da questo comando è la seguente:

         

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

  •   
     

Per rendere il processo di scoperta ComObject più facile la seguente   funzione può essere utilizzata.

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

Questa funzione è disponibile in TechNet Gallery Script:

     

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top