Windows 7 でグローバル マウス フックを挿入する dll を作成しようとしています。基本的には動作しますが、数秒後 (おそらく 10 ~ 15)、アプリケーション全体がフリーズし、Visual Studio の外でマウスが動作しなくなります (まだvs を介してアプリを停止しますが、他には何もしません (タスク マネージャーを使用して停止するなど)。
私はしばらくの間探してきましたが、私の問題に対する答えが本当に見つかりません。私は自分のdllを最小限に減らしました(マウスフックを何もせずにインストールします)が、それでも起こります。
ヘッダ
#ifndef MOUSE_HOOK_WINDOWS_H
#define MOUSE_HOOK_WINDOWS_H
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
#pragma data_seg(".mouseHookSharedMemory")
HHOOK g_hMouseHook = NULL;
HINSTANCE g_hInst = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.mouseHookSharedMemory,RWS")
extern "C"
{
DECLDIR BOOL InstallHook();
DECLDIR BOOL UninstallHook();
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
}
#endif
cpp
#include <Windows.h>
#include "MouseHookWindows.h"
#include <sstream>
extern "C"
{
DECLDIR BOOL InstallHook()
{
if(g_hMouseHook != NULL)
{
return true;
}
g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
if(g_hMouseHook == NULL)
{
return false;
}
return true;
}
DECLDIR BOOL UninstallHook()
{
if(g_hMouseHook != NULL)
{
UnhookWindowsHookEx(g_hMouseHook);
g_hMouseHook = NULL;
}
return true;
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
}
}
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved)
{
g_hInst = hInstance;
return true;
}
例外も何もありません。アプリケーションがフリーズし、Visual Studio 以外のすべてがマウスに反応しなくなります (前に述べたように、タスク マネージャーでさえありません)。
重要かどうかはわかりませんが、C++ コンソール アプリケーションで dll を使用しています。
前もってありがとうマヌエル