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

///

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值