別のプロセスから適切にシャットダウンするように指示したいac#アプリケーションがあります。また、メインウィンドウを開くように依頼できるようにしたいと思います。メインウィンドウのハンドルへの参照があります。
私は、リモート処理やWCFなどの複雑なスキームを使用してそれを実行できることを知っています。問題は、ウィンドウメッセージなどのより単純なメカニズム、またはc#アプリケーションのウィンドウのOnCloseイベントハンドラーを使用してそれを実行できるかどうかです。
SendMessage()をPinvokeして、WM_CLOSEメッセージをアプリのメインウィンドウに送信します。メインウィンドウを開くように要求するのはおそらく非常に難しいでしょう。ウィンドウが作成されるまでウィンドウハンドルを取得することはできません。Process.Start()が通常の方法です。
WCFに代わる低コストで、pinvokeよりも優れているのは、アプリとインターフェイスする名前付きパイプまたはソケットです。これには、アプリのソースコードを変更できる必要があります。
Process.CloseMainWindow
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.closemainwindow.aspx
FindWindow
おそらく、正しい子ウィンドウを見つけてから、SendMessage
またはPostMessage
を送信するために使用できると思いますWM_CLOSE
。
これは、C#でこれを行うことを扱う別のStackOverflowの質問です。
Process.CloseMainWindow
編集:他の答えがその質問で言うように、あなたは代わりに使うことができるかもしれませんが。
最初に、ターゲットアプリケーションに、他のプロセスがウィンドウのクローズまたはオープンをトリガーしたり、何らかのアクションを実行したりする可能性があるという事実を「認識」させます。これは、ターゲットアプリのAPIまたはパブリックメソッドを介して別のプロセスでメソッドを呼び出すのと同様に実装する必要があります。..サードパーティのアプリケーションで何かをしようとしているのでない限り、それらにメッセージを直接送信して閉じたりシャットダウンしたりしないでください。