comオブジェクトを探索/テストするためのツールはありますか?

StackOverflow https://stackoverflow.com/questions/3940498

  •  30-09-2019
  •  | 
  •  

質問

Python(win32com)のcomオブジェクトを使用してプロセスを自動化しようとしていますが、予想される結果が得られていません...特定のプログラムを作成せずにcomオブジェクトを探索/テストするツールはありますか?つまり、EGがcomオブジェクトをインスタンス化してその方法を呼び出すことを可能にする何かがありますか?

(基本的に、私の予期しない結果がWin32comのせいであるかどうかを調べようとしています。C#アプリを書くためにVisual Studioをインストールしないようにしたいと思います)

役に立ちましたか?

解決 4

記録のために、私は最終的に非常に小さなスクリプトを使用して書くことになりました scite4autohotkeyAutohotkey Comラッパー, 、.NETは不要です。
(そして、私の予想外の結果はPythonのせいではありませんでした:))

他のヒント

私は実際に、SDKツールOleview(AFAIKは、列挙のみを列挙するだけの呼び出しメソッドをサポートしていない)の代替品をoleviewdotnetと書きました。ソースコードを取得できます ここ ただし、コンパイルする必要があるため、簡単なC#プログラムを作成するか、PowerShellを使用する方が迅速です。

それが行うことは、GUIを介してIdisPatchメソッド(および一部のネイティブインターフェイス)を公開することです。そのため、それらを呼び出すことができ、Ironpythonスクリプトウィンドウも提供します。 「レジストリ - > clsid by name」の下を見ることでcomオブジェクトを見つける必要があります。エントリ(フィルターを使用して名前パーツで選択できます)右クリックして[インスタンスを作成]を選択します。に似ている:

object information

次に、下部にある[操作]メニューを選択し、[ディスパッチ]を選択してメソッド/プロパティウィンドウを取得します。

enter image description here

これでできることはたくさんありますが、それは簡単な概要です。

ダウンロードした場合 Windows SDK WebSetupを介して、SDKツールをダウンロードすることを選択できるはずです。これらには、登録されたすべてのCOMオブジェクトを閲覧するために使用できるOLE/COM Viewer(Oleview.exe)というプログラム、およびOLEオートメーションをサポートするオブジェクト、それらを開き、メソッドを呼び出すことが含まれます。

PowerShellでCOMオブジェクトを探索しています。これを素晴らしいものにしました レシピ, 、Jaap Brasserが提供しています。これは簡単に実行でき、私の質問に答えました。

利用可能なすべてのcomオブジェクトのリストを取得します 2013年6月27日にJaap Brasserが投稿しました

注:このヒントでは、PowerShell 2.0以上が必要です。

最近、PowerShell.comフォーラムに質問が投稿されました。利用可能なcomobjectsの完全なリストを取得する方法は?このヒントでは、レジストリからすべてをフェッチする方法を示します。

このリストを生成するために使用できるコードは次のとおりです。

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

最初のcmdletは、hklm: software classesの値の完全なリストを読み取り、次の2つの条件が真である場合に検証します。

  • オブジェクトは、comobjectの命名規則と一致していますか?
  • レジストリキーにはCLSIDフォルダーがありますか?登録されたすべてのcomobjectは、一意の識別子としてCLSIDを持つ必要があります。このコマンドによって生成された出力の例は次のとおりです。

    accclientdocmgr.accclientdocmgr
    accdictionary.accdictionary
    Access.accdaextension
    Access.accdcfile
    Access.AccDefile
    Access.accdtfile
    access.accftfile
    Access.adefile

comobjectを発見するプロセスを簡単にするために、次の関数を使用できます。

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

この関数は、TechNetスクリプトギャラリーで入手できます。

http://gallery.technet.microsoft.com/get-comobject-function-to-50A92047

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top