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;
}
///////////////////////////////////////////////////////////////
//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;
}
///////////////////////////////////////////////////////////////
相关文章推荐
- 用全局钩子截掉所有进程的鼠标和键盘 DLL的调试方法
- Windows全局钩子dll(键盘)
- Windows全局钩子dll(键盘)
- 不需要DLL的全局钩子完成鼠标截屏功能
- 如果要设置系统级(全局)钩子, 钩子函数必须封装在 DLL 中
- 写了一个好玩的小软件, 监视鼠标以及键盘的动作, 全局钩子. HowTired
- 不使用DLL创建全局系统钩子
- VB.NET全局键盘鼠标钩子 [Vb.Net Hook](修正版)
- 仿QQ悬挂窗口的实现(全局鼠标钩子)
- 不依赖于DLL就能工作的全局钩子
- 使用钩子函数[3] - 建立一个全局的鼠标钩子
- pyqt全局鼠标事件/钩子
- c#+windows api SetWindowsHookEx 全局钩子 demo 下载
- 鼠标全局钩子
- 依赖于DLL就能工作的全局钩子
- 鼠标全局钩子
- SetWindowsHookEx设置全局键盘钩子
- windows之全局键盘钩子以及键盘事件模拟触发
- MFC线程钩子和全局钩子[HOOK DLL]
- 不依赖于DLL就能工作的全局钩子