2016-04-30 9 views
1

私は2つのアプリケーションを持っています。 そのうちの1つはWPFアプリで、もう1つはシステムトレイアプリです。 最初のものは何とかIntPtrプロセス/アプリケーション間でIntPtrを渡す方法

IntPtr thisWindowHandle = (new WindowInteropHelper(this)).Handle; 

別のものに彼のウィンドウポインタを渡す必要があり、もう一つはそれを受け入れ、WPFアプリのアクティブ画面を検出しなければなりません。

Screen activeScreen = Screen.FromHandle(thisWindowHandle); 

私の質問は、私たちは、これらのアプリケーション間のIntPtrを送ることができますし、それがすべてで行うことが可能である方法ですか?

ありがとうございました!

答えて

1

同じデスクトップ上で同じセッションで実行されるプロセス間でウィンドウハンドルを交換することは可能です。あなたのアプリが、例えばサービスのようなものなら、それはうまくいかないでしょう。

WCF、ソケット、名前付きパイプ、ファイル、コマンドライン引数などのハンドルを渡すには、標準の.NETプロセス相互運用メカニズムを使用する必要があります。多分あなたが必要とするのはProcess.MainWindowHandleなので、何も渡す必要はありません。それはもちろんもっとも簡単です。

あなたのWPFアプリがクラッシュし、あなたの「トレイアプリ」が動作し続けるというシナリオを念頭において失敗モードを保つことはめったにうまくいきません。通知領域にアイコンを表示しても、別のプロセスは必要ありません。

0

この目的でMicrosoft Message Queuingを使用できます。

もう1つの方法は、記載されているようにIntPtrを渡すことなくタイトルでウィンドウを見つけることです。here

関連する問題