您的位置:首页 > 其它

Windows 全局 鼠标 钩子 DLL

2010-11-25 10:00 375 查看
//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;
}

///////////////////////////////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息