1

を使用して 2 つの .NET Windows フォーム アプリケーションからメッセージを送信する実験を行っていますがWM_COPYDATA、うまく機能します。

コンソール アプリケーションで実現できるかどうかを知りたいです。

すべてのSendMessage関数がウィンドウ ハンドルを受け取った後、コンソール アプリケーションのウィンドウ ハンドルを取得するにはどうすればよいでしょうか。

[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);

また、メッセージを受信できるようにするには、コンソール アプリケーションである種のメッセージ ループを設定する必要がありますか?

4

2 に答える 2

4

最も一般的なIPCメソッド (を除くWM_COPYDATA) は、メモリ マップト ファイルと名前付きパイプです。後者をチェックすることをお勧めします。

MSDN には、名前付きパイプ通信の例があります。具体的には、使用する必要があるクラスはNamedPipeServerStreamNamedPipeClientStreamであり、作成されると通常のネットワーク ストリームとほぼ同じように動作します。

良い点は、ネットワーク経由でも動作することですが、明らかに単一のマシンでも使用できます.

控えめに言っても、コンソール アプリケーションで実際の Windows メッセージ ループを設定するのは複雑です。本当にそれを行う必要がある場合は、この件に関するかなり長い記事があります。データの転送だけを行う場合は、代わりに名前付きパイプを使用することを強くお勧めします。標準の Windows メッセージを実際に処理する必要がない場合、これを行う価値はありません。

于 2010-03-04T01:12:33.280 に答える
2

@ tommieb75:XDMessagingは実際には私のライブラリです:) WM_COPYDATAは、メッセージポンプがないため、コンソールアプリケーションでは機能しません。ただし、ライブラリには、コンソールアプリとサービスで機能するIOStreamベースのIPC実装が含まれています。http://thecodeking.github.com/XDMessaging.Net/

于 2010-03-25T13:24:22.263 に答える