comオブジェクトを探索/テストするためのツールはありますか?
質問
Python(win32com)のcomオブジェクトを使用してプロセスを自動化しようとしていますが、予想される結果が得られていません...特定のプログラムを作成せずにcomオブジェクトを探索/テストするツールはありますか?つまり、EGがcomオブジェクトをインスタンス化してその方法を呼び出すことを可能にする何かがありますか?
(基本的に、私の予期しない結果がWin32comのせいであるかどうかを調べようとしています。C#アプリを書くためにVisual Studioをインストールしないようにしたいと思います)
解決 4
記録のために、私は最終的に非常に小さなスクリプトを使用して書くことになりました scite4autohotkey と Autohotkey Comラッパー, 、.NETは不要です。
(そして、私の予想外の結果はPythonのせいではありませんでした:))
他のヒント
私は実際に、SDKツールOleview(AFAIKは、列挙のみを列挙するだけの呼び出しメソッドをサポートしていない)の代替品をoleviewdotnetと書きました。ソースコードを取得できます ここ ただし、コンパイルする必要があるため、簡単なC#プログラムを作成するか、PowerShellを使用する方が迅速です。
それが行うことは、GUIを介してIdisPatchメソッド(および一部のネイティブインターフェイス)を公開することです。そのため、それらを呼び出すことができ、Ironpythonスクリプトウィンドウも提供します。 「レジストリ - > clsid by name」の下を見ることでcomオブジェクトを見つける必要があります。エントリ(フィルターを使用して名前パーツで選択できます)右クリックして[インスタンスを作成]を選択します。に似ている:
次に、下部にある[操作]メニューを選択し、[ディスパッチ]を選択してメソッド/プロパティウィンドウを取得します。
これでできることはたくさんありますが、それは簡単な概要です。
ダウンロードした場合 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.adefilecomobjectを発見するプロセスを簡単にするために、次の関数を使用できます。
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