DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SendMessage() APIで送信したメッセージをC#アプリ側で受信する方法

環境/言語:[C#]
分類:[.NET]

はじめまして。れいと申します。

<問題>
アプリAが、SendMessage() APIを使用して、アプリBに対してメッセージを送信したいのですが、実装できず困っています。

<目的概要>
アプリAは、アプリBのウインドウハンドルを検出し、そのハンドルに対して、SendMessage() APIを使用して、メッセージを送ります。
アプリBは、そのメッセージを受信することによってイベントが発生し、そのイベントに対応した処理を実行します。

<環境>
アプリAは、VB6.0。
アプリBは、C#。

<問い>
アプリBが、VB6.0ならば、
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips096.htm
にあるとおり、問題なく動作します。
しかし、アプリBは、C#で実装する必要があり、C#のメッセージ処理部分が隠蔽されていて、
メッセージが届いた後の、イベントの振り分けをどのように実装すれば良いのかわかりません。教えてください。m(__)m

そもそも、他のアプリからSendMessage() APIメッセージを受信して、そのメッセージを判別して処理をするといったことは、C#ではできるのでしょうか?

<備考>
今回、10文字程度の文字列が送れるアプリケーション間通信ができれば問題ないということで、上記のようなメッセージで送る方法を考えました。これがNGなら、ソケットを使って実装しようかとも思っています。
こんにちは、れいさん。ピラルクです。

FormのWndProcをoverrideすれば取れると思います。

public class Form1 : System.Windows.Forms.Form
{
……
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x004A) //WM_COPYDATA
{
Console.WriteLine("WM_COPYDATAが来ました");
}
base.WndProc(ref m);
}
}
2004/02/12(Thu) 10:59:17 編集(投稿者)

こんにちは、ピラルクさん。

ご指摘のとおり、実装しましたところ、問題なく動作しました。
完璧です!!
ありがとうございましたm(__)m。

P.S.
C#にも、WndProc() があるんですね(当たり前なのかな)。
フォーム(正確には、全てのコントロール?)にWndProc が存在するということと、
そしてそれを、オーバライドすることにより、メッセージを横取りできる。
やっぱり、C#ってスマートでいいですね!

ピラルクさん!ありがとうございました!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板