|
分類:[.NET 全般]
いつもお世話になっております。
タイトルにもありますが自作メッセージポンプを持ったワーカースレッドを
作成したいのですが上手くいきません。
ある別アプリにWM_USER+αのメッセージID、返信先ウィンドウハンドルを送信すると
別アプリが同じメッセージIDでウィンドウハンドルへSendMessageするので
それをウィンドウプロシージャでなくてワーカースレッドで拾いたいのです。
本来はUIスレッドでメッセージを処理すべきだとは思いますが…
ちなみにワーカースレッドはThreadクラスを生成し、バックグラウンド動作させ
スレッド関数内で以下のようになっています。
//別アプリウィンドウハンドル取得
IntPtr pSendWnd = FindWindow( null, "TestProg" );
IntPtr pParamW = IntPtr.Zero;
IntPtr pParamL = IntPtr.Zero;
//別アプリへメッセージ送信成功?
if( SendMessage( pSendWnd, WM_USER + 1, pParamW, pParamL ) != 0 )
{
while( true )
{
//メッセージ取得成功?
if( GetMessage( out Msg, IntPtr.Zero, 0, 0 ) > 0 )
{
if( Msg.message == WM_USER + 1 )
{
//TODO : ここで受信時処理をする
break;
}
DispatchMessage( ref Msg );
}
else
{
//TODO : エラー処理をする
break;
}
}
}
SendMessageが成功し、別アプリが動作し応答のSendMessageを送信しているとこまでは
問題ないのですがそのメッセージを取得することができません。別アプリは側が
PostThredMessageに変えれば受信できそうな気もしますが、別アプリ側は改造できません。
何か上記コードでは動作しない何か原因があるのでしょうか?
ちなみに環境は
WindowsXP SP3
VisualStudio2008以降
です。
ご存知の方、教えてください。
|