//Windows 全局 鼠標 鉤子 DLL
//MouseHook.h
///////////////////////////////////////////////////////////////
#ifdef MOUSEHOOK_EXPORTS
#define MOUSEHOOK_API __declspec(dllexport)
#else
#define MOUSEHOOK_API __declspec(dllimport)
#endif
///////////////////////////////////////////////////////////////
MOUSEHOOK_API BOOL InstallMouseHook(HWND hWnd);
MOUSEHOOK_API BOOL UninstallMouseHook();
///////////////////////////////////////////////////////////////
//MouseHook.cpp
///////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MouseHook.h"
#include <windows.h>
///////////////////////////////////////////////////////////////
static HWND g_hWnd = NULL;
static HMODULE g_hModule = NULL;
static HHOOK g_hhk = NULL;
///////////////////////////////////////////////////////////////
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hModule = hModule;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
LRESULT CALLBACK MyMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (lParam)
{
MOUSEHOOKSTRUCT *pMH = reinterpret_cast<MOUSEHOOKSTRUCT *>(lParam);
switch (wParam)
{
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONUP:
//case WM_MBUTTONDOWN:
//case WM_LBUTTONDBLCLK:
//case WM_MBUTTONDBLCLK:
//case WM_RBUTTONDBLCLK:
//case WM_MOUSEWHEEL:
if (0 == SendMessage(g_hWnd,(UINT)wParam,0,MAKELPARAM(pMH->pt.x,pMH->pt.y)))
{
return CallNextHookEx(g_hhk, nCode,wParam,lParam);
}
return 1;
default:
return CallNextHookEx(g_hhk, nCode,wParam,lParam);
}
}
}
return CallNextHookEx(g_hhk, nCode,wParam,lParam);
}
///////////////////////////////////////////////////////////////
MOUSEHOOK_API BOOL InstallMouseHook(HWND hWnd)
{
if (NULL == g_hhk && NULL == g_hWnd)
{
g_hWnd = hWnd;
g_hhk = SetWindowsHookEx(WH_MOUSE_LL,MyMouseProc,g_hModule,NULL);
if (NULL != g_hhk)
{
return TRUE;
}
else
{
g_hWnd = NULL;
g_hhk = NULL;
}
}
return FALSE;
}
MOUSEHOOK_API BOOL UninstallMouseHook()
{
if (NULL != g_hhk)
{
return UnhookWindowsHookEx(g_hhk);
}
return TRUE;
}
///////////////////////////////////////////////////////////////