DOBON.NET DOBON.NETプログラミング掲示板過去ログ

取得済みProecssからアプリ本体のインスタンスを取得したい

分類:[.NET]

OS:2k/XP/Vista/7
言語:VB/C#/DelphiPrism
.NET:2.0

こんにちは

.NETで作られたアプリAとBが起動しているとします。
AからBのプロセスを見つけることはできますが、このBのインスタンスを
取得する方法がわかりません。

プロセスから起動元のexe(またはdll)のパスは取れるので、そのファイルを元にリフレクションで
動的にインスタンス生成する方法も考えていますが、できれば起動済みの
アプリのインスタンスを横取りできればと思っています。
(.NET同士という前提があるので、それ以外のアプリは考慮しなくて良い状態です)

以上よろしくお願いします
■No26538に返信(月夜見命さんの記事)
> .NETで作られたアプリAとBが起動しているとします。
> AからBのプロセスを見つけることはできますが、このBのインスタンスを
> 取得する方法がわかりません。

Managed Spy で拾う事ができますか?
http://msdn.microsoft.com/msdnmag/issues/06/04/ManagedSpy/default.aspx
■No26539に返信(魔界の仮面弁士さんの記事)
返信ありがとうございます
ManagedSpyを試してみました

メソッドの実行など、自アセンブリ内にいるクラスのようにフルアクセスしたかったのですが
プロパティとイベントくらいしかControlProxyにありませんでした。

ComponentTypeプロパティがType型なのでGetMethodなどがありますが、
Invokeで実行する際にインスタンスオブジェクトが必要となっていて、
既存インスタンスの取得方法がわからないので実現できませんでした

新規インスタンスを生成する必要があるなら、むしろManagedSpyを使わず
プロセスのMainModule.FileNameを元にインスタンス生成しようかなと思いますが
既存インスタンスを取得する方法はあるのでしょうか

またプロセスのMainWindowsHandleを元に取得したControlProxyで、
ComponentTypeがnullになっているのもよくわかりませんでした。
->子コントロールがいるなら、Child[x].Parentで目的のComponentTypeが取れるが
 子コントロールいない場合はどうするのやら...

ManagedSpyLibの日本語情報がほとんどないため非常に苦戦しております...^^;

DOBON.NET | プログラミング道 | プログラミング掲示板