5

別のプロセスから適切にシャットダウンするように指示したいac#アプリケーションがあります。また、メインウィンドウを開くように依頼できるようにしたいと思います。メインウィンドウのハンドルへの参照があります。

私は、リモート処理やWCFなどの複雑なスキームを使用してそれを実行できることを知っています。問題は、ウィンドウメッセージなどのより単純なメカニズム、またはc#アプリケーションのウィンドウのOnCloseイベントハンドラーを使用してそれを実行できるかどうかです。

4

4 に答える 4

7

SendMessage()をPinvokeして、WM_CLOSEメッセージをアプリのメインウィンドウに送信します。メインウィンドウを開くように要求するのはおそらく非常に難しいでしょう。ウィンドウが作成されるまでウィンドウハンドルを取得することはできません。Process.Start()が通常の方法です。

WCFに代わる低コストで、pinvokeよりも優れているのは、アプリとインターフェイスする名前付きパイプまたはソケットです。これには、アプリのソースコードを変更できる必要があります。

于 2010-12-08T13:32:25.207 に答える
3

Process.CloseMainWindow

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.closemainwindow.aspx

于 2010-12-08T13:30:32.340 に答える
2

FindWindowおそらく、正しい子ウィンドウを見つけてから、SendMessageまたはPostMessageを送信するために使用できると思いますWM_CLOSE

これは、C#でこれを行うことを扱う別のStackOverflowの質問です。

Process.CloseMainWindow編集:他の答えがその質問で言うように、あなたは代わりに使うことができるかもしれませんが。

于 2010-12-08T13:27:05.080 に答える
0

最初に、ターゲットアプリケーションに、他のプロセスがウィンドウのクローズまたはオープンをトリガーしたり、何らかのアクションを実行したりする可能性があるという事実を「認識」させます。これは、ターゲットアプリのAPIまたはパブリックメソッドを介して別のプロセスでメソッドを呼び出すのと同様に実装する必要があります。..サードパーティのアプリケーションで何かをしようとしているのでない限り、それらにメッセージを直接送信して閉じたりシャットダウンしたりしないでください。

于 2010-12-08T13:56:36.487 に答える