0

SetWindowsHookExとWH_MOUSEを使用して、マウス移動イベントをキャプチャしようとしています。HTCAPTION領域以外のすべての場所で機能します(少なくとも私のコードサンプルでは)。この動作への参照が見つからないため、マウスの動きを監視するために同じことを行う別のアプリケーションにwindbgしようとしました。使用されるメソッドもWH_MOUSEであり、マウスがキャプション領域上にある場合でもイベントが生成されます。したがって、機能しない場合を除いて、機能するはずです。

何か案は ?

編集:私はこれを使用してすべてのプロセスをフックしています。アプリケーションの内部ウィンドウにメッセージを転送する別のdllを作成しました。dwThreadId=0を使用します。キャプション領域でもマウスクリックが発生しません。

4

1 に答える 1

0

私はそれを考え出した :

MouseHookProc SetWindowsHookExに指定されたmouseprocは、マウスのすべてのイベントを受信します。つまり、wParamがWM_MOUSEまたはWM_NCMOUSEMOVEと等しいことをテストする必要があります。カーソルがクライアント領域上にある場合はWM_MOUSEが受信され、非クライアント領域上にある場合はWM_NCMOUSEMOVEが起動されます(通常のメッセージprocのように)。

LRESULT CALLBACK MouseHookProc(int nCode, WORD wParam, DWORD lParam)
{
    if(nCode>=0 && (wParam==WM_MOUSEMOVE || wParam==WM_NCMOUSEMOVE))
    {
        if(!hwnd)
            hwnd=FindWindow(0, "MyWindow");

        MSLLHOOKSTRUCT *mhs=(MSLLHOOKSTRUCT*)lParam;        
        PostMessage(hwnd, WM_MOUSEHOOK, wParam, 0);
    }
    return CallNextHookEx(hHook,nCode,wParam,lParam);
}

WM_MOUSEはある種の対応する値であると思いましたが、実際のマウスメッセージではありませんでした。

于 2009-06-15T15:53:09.313 に答える