パスワードを忘れた? アカウント作成
652424 journal

A7Mの日記: マウスメッセージのフック

日記 by A7M

忘れないうちに、覚え書き。

特定ウィンドウ上でマウスメッセージを監視する場合、必ずGetCurrentThreadIdでスレッドIDを取得しないと、グローバルフックになってしまうので、他のすべてのプロセスに影響が出る。

extern "C" __declspec(dllexport) LPARAM WINAPI
HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{

    if( nCode == HC_ACTION && wParam == WM_RBUTTONDOWN) {
        // 右ボタンクリックが無効になる。
        MOUSEHOOKSTRUCT* pMHS = (MOUSEHOOKSTRUCT*)lParam;

        return 1;
    } else {
        return CallNextHookEx(hHook, nCode, wParam, lParam);
    }
}

extern "C" __declspec(dllexport) void WINAPI
InitHook(HINSTANCE hinst)
{
    // 重要!!
    DWORD threadID = GetCurrentThreadId();

    if (threadID) {
        hHook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)HookProc, hinst, threadID);
    }
}

道理で他のプロセスでも右クリックが効かなくなったり、dllがメモリ上に残ってビルドできなかったりするんだな。
俺の馬鹿!!

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...