Windows 全局 鼠標 鉤子 DLL

//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;
}

///////////////////////////////////////////////////////////////

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章