開発環境VC++6。プログラムでカーソルをフックしたら マウスが動かなくなってしまいました。横取りしたメッセージを本来受け取るアプリに投げる方法を教えてください。フックDLLのコールバック関数の中身は以下のとおりとなっています。

LRESULT CALLBACK CMouseHook::MouseHookProc(int p_nCode, WPARAM p_wParam, LPARAM p_lParam)
{
   switch(p_nCode){
     case HC_ACTION:
     MOUSEHOOKSTRUCT *msl;
     msl=(MOUSEHOOKSTRUCT *)&p_lParam;
     if(p_wParam==WM_MOUSEMOVE){
         SendNotifyMessage(MhWnd,(WM_USER+1),msl->pt.x,msl->pt.y);
     }
     break;
     default:
     break;
   }
   ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );
   return TRUE;
}

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/01 23:08:53
  • 終了:2007/03/02 10:28:00

ベストアンサー

id:mj99 No.1

mj99回答回数138ベストアンサー獲得回数382007/03/02 01:36:10

ポイント100pt

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

nCode パラメータの値が 0 未満の場合、このフックプロシージャは CallNextHookEx 関数を呼び出し、その関数の戻り値を返さなければなりません。

nCode パラメータの値が 0 以上の場合も、CallNextHookEx 関数を呼び出し、その関数の戻り値を返すことを強く推奨します。CallNextHookEx 関数を呼び出さないと、WH_CALLWNDPROCRET フックをインストールしたほかのアプリケーションがフックの通知を受け取れず、誤動作する可能性があります。このフックプロシージャが CallNextHookEx 関数を呼び出さない場合、0 を返すべきです。

とあるので、関数の最後は、

return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );

としてください。

id:harunoharuno

回答ありがとうございます。

自分で調べるのもジリ貧かなぁと感じてきたところ、

教えていただいたとおりに戻り値にcallNextHookExを渡したら

正常にマウスが動作しました!

本当に助かりました。ありがとうございます。

2007/03/02 10:27:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません