>>339-342
SetWindowsHookEx自体は1回だけ呼び出すようにするつもりです。
元のソースは書きかけだったもので・・・お手数おかけしました。

>>347

こんな感じでいいんでしょうか?

bool g_InstallHook( HMODULE hModule, HWND hwndNew ) {
HANDLEhMutex = NULL;
boolresult;

hMutex = ::CreateMutex( NULL, TRUE, SYSTEM_HOOK_MUTEX_NAME );
if ( hMutex == NULL ) return false;// fatal error

if (::GetLastError() == ERROR_ALREADY_EXISTS) {
DWORDdwWaitResult;

dwWaitResult = ::WaitForSingleObject( hMutex, 1000 );

if (dwWaitResult != WAIT_OBJECT_0) return false;// fatal timeout

}

if (g_hMouseHook == NULL) {
g_hMouseHook = (HHOOK)::SetWindowsHookEx(
WH_MOUSE, (HOOKPROC)g_MouseProc, hModule, 0
);
}