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がメモリ上に残ってビルドできなかったりするんだな。
俺の馬鹿!!
マウスメッセージのフック More ログイン