| 
                 分類:[.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以降
です。
ご存知の方、教えてください。
  |