人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

開発環境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;
}

●質問者: harunoharuno
●カテゴリ:コンピュータ ゲーム
✍キーワード:CASE DLL PT switch VC++
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● mj99
●100ポイント ベストアンサー

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 );

としてください。

◎質問者からの返答

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ