開いているアプリケーションの複数インスタンス(WRQ Reflection)への接続を作成しようとしています。アプリケーションの実行中の複数のインスタンスに接続する
Session appInstance = (Marshal.GetActiveObject("Reflection4.Session.8") as Session);
しかし、私は複数のインスタンスに接続できるようにしたいと思います:開かれた最初のインスタンスに接続すると、これを用いて微細です。私は多くの研究をしており、thisのような有益なリンクを見つけましたが、この状況では開いているすべてのインスタンスが同じprogIdを持っているため、この解決策は動作しません。
私はまた、明らかに各インスタンスごとに異なるウィンドウハンドルを調べてみました。これを使用する:
Process[] processes = Process.GetProcessesByName("r4win");
foreach (Process p in processes)
{
IntPtr windowHandle = p.MainWindowHandle;
string handle = windowHandle.ToString();
MessageBox.Show(handle);
}
しかし、私はウィンドウハンドルを介してウィンドウへの接続を作成する方法を見つけることができませんでした。
ご協力いただければ幸いです。
追加コード:このシナリオでは
void TestROT()
{
// Look for open instances
string[] progIds = {"Reflection4.Session.8"};
List<object> instances = GetRunningInstances(progIds);
foreach (object refleObjs in instances)
{
Session session = refleObjs as Session;
session.Transmit("12345");
}
}
、私は、ターゲットアプリケーションの実行中の2つのインスタンスを持っています。上記のコードでは、12345という文字列をアプリケーションの同じインスタンスに2回送信します。
最初のインスタンスに12345を送信し、2番目のインスタンスに12345を送信する必要があります。
接続するとどういう意味ですか?何をすべきか?あなたが投稿したコードは、COMオートメーションに関するものであり、いかなる種類の接続でもありません。それは例えば約です。 Interopを使用してWordを駆動します。あなたは何をしようとしているのですか?接続はソケット、サービス、WCFなどのことを意味し、オートメーションではない –
PSでもCOMでは、CreateObjectは新しいオブジェクトを作成するか、既存のものを使用し、GetActiveObjectは新しいオブジェクトを作成します。 .NETでは、生のCOMメソッドの代わりにCOM Interopを使用していますが、 –
申し訳ありませんが、正しい用語がわかりません。接続とは、アプリケーションにテキストやコマンドを送信し、画面から情報を読み取る機能を意味します。 –