[开源]鼠标钩子

LPF2015 2013-01-11 06:16:58
加精
实现按键C++版的滚轮消息按键。

//DLL
#define _WIN32_WINNT 0x0500

#include <windows.h>

_declspec(dllexport) BOOL MouseHK(); //滚轮吃药

LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam); //鼠标钩子回调函数

HHOOK hkMouse = NULL; //鼠标钩子句柄
HINSTANCE hWnd = NULL; //DLL实例句柄

BOOL MouseHK()
{
if(hkMouse)
{
UnhookWindowsHookEx(hkMouse);
hkMouse = NULL;
return FALSE;
}
else
{
hkMouse = SetWindowsHookEx(WH_MOUSE, HookProcMouse, hWnd, 0);
return TRUE;
}
}

LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam)
{
short x;
typedef struct tagMOUSEHOOKSTRUCTEX {
MOUSEHOOKSTRUCT MOUSEHOOKSTRUCT;
DWORD mouseData;
} MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX, *LPMOUSEHOOKSTRUCTEX;
if(nCode >= 0 && wParam == WM_MOUSEWHEEL)
{
LPMOUSEHOOKSTRUCTEX m = (LPMOUSEHOOKSTRUCTEX)lParam;
x = HIWORD(m->mouseData);
if(x > 0) keybd_event('2', 0, 0, 0);
else keybd_event('2', 0, 0, 0);
}
return CallNextHookEx(hkMouse, nCode, wParam, lParam);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hWnd = (HINSTANCE)hModule;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_PROCESS_DETACH:
case DLL_THREAD_DETACH:
if (hkMouse) UnhookWindowsHookEx(hkMouse);
break;
}
return TRUE;
}



//APP
#define _WIN32_WINNT 0X0500

#include <windows.h>
#include <tchar.h>
#include "resource.h"

#pragma comment(lib, "hk.lib")

_declspec(dllimport) BOOL MouseHK();

BOOL WINAPI MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainProc);

return 0;
}

BOOL WINAPI MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:

switch(LOWORD(wParam))
{
case ID_MOUSEHK:
if(MouseHK()) SetDlgItemText(hWnd, ID_MOUSEHK, _T("停止"));
else SetDlgItemText(hWnd, ID_MOUSEHK, _T("开始"));
break;
case IDCANCEL:
EndDialog(hWnd, NULL);
}
}
return FALSE;
}



//RC
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END

#endif // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_MAIN DIALOG DISCARDABLE 0, 0, 81, 79
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "System"
BEGIN
DEFPUSHBUTTON "开始",ID_MOUSEHK,7,56,67,16
CTEXT "剑侠情缘",IDC_STATIC,7,7,67,11
CTEXT "倚天情",IDC_STATIC,7,25,67,11
CTEXT "超级滚轮",IDC_STATIC,7,41,67,11
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_MAIN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 74
TOPMARGIN, 7
BOTTOMMARGIN, 72
END
END
#endif // APSTUDIO_INVOKED

#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED





//RC.H
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by dialog.rc
//
#define IDD_MAIN 101
#define ID_MOUSEHK 1004

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

...全文
6242 92 打赏 收藏 转发到动态 举报
写回复
用AI写文章
92 条回复
切换为时间正序
请发表友善的回复…
发表回复
第27个小孩 2015-08-29
  • 打赏
  • 举报
回复
thanks for the sharing , really helps a lot
k_c_u_f 2013-03-22
  • 打赏
  • 举报
回复
不错,继续努力!
yht7905907 2013-03-22
  • 打赏
  • 举报
回复
没用过钩子,不过还是顶起。也学学
  • 打赏
  • 举报
回复
收藏了,很有参考价值
my_ibmcode 2013-01-27
  • 打赏
  • 举报
回复
感谢楼主分享!谢谢!!
weizhong712 2013-01-26
  • 打赏
  • 举报
回复
谢谢分享啊啊
jiaoyumu 2013-01-26
  • 打赏
  • 举报
回复
顶楼主。
xiaoqin1999 2013-01-25
  • 打赏
  • 举报
回复
好人,谢谢分享
NetSmallRookie 2013-01-23
  • 打赏
  • 举报
回复
建议楼主放到资源里面供下载。
xiaocongzhi 2013-01-23
  • 打赏
  • 举报
回复
正在研究Delphi钩子,刚好可以借签
new_fengzi 2013-01-22
  • 打赏
  • 举报
回复
感谢楼主分享
ilovechao1314 2013-01-22
  • 打赏
  • 举报
回复
感谢楼主分享,好人啊
nettman 2013-01-22
  • 打赏
  • 举报
回复
likewyqiang 2013-01-22
  • 打赏
  • 举报
回复
不错啊!真厉害。感谢了
mangshe0 2013-01-22
  • 打赏
  • 举报
回复
感谢分享!!!
hachi1030 2013-01-21
  • 打赏
  • 举报
回复
弱弱地问一下这个到底是个啥?
echo_gy 2013-01-21
  • 打赏
  • 举报
回复
resource.h是什么 果断不懂
insunshine 2013-01-20
  • 打赏
  • 举报
回复
牛啊,分享的好东西,感谢!
dreamgis 2013-01-20
  • 打赏
  • 举报
回复
标记,,,学习
djzny 2013-01-20
  • 打赏
  • 举报
回复
加载更多回复(59)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧