VC++ Hook截取鼠标点击窗口消息的问题!全局钩子,高手进!

我在做毕业设计,现在遇到一个问题,像求教高手:我想实现如下功能,当鼠标点击一个按钮的时候,实现一个功能,然后把这个鼠标的消息在传递下去,继续传给原来的应用程序,需要说明的... 我在做毕业设计,现在遇到一个问题,像求教高手:
我想实现如下功能,当鼠标点击一个按钮的时候,实现一个功能,然后把这个鼠标的消息在传递下去,继续传给原来的应用程序,需要说明的是按钮的句柄已知,设为hwnd,并且这个按钮不是本应用程序的按钮,访问其他的进程需要全局钩子,所以编译出的应该是dll文件;
如何实现这个功能,求教高手,我这两天有点晕,呵呵,代码或工程请发到ipconfig@163.com,或粘贴到网页上都可以,毕业设计很重要,还可以继续再加400分;
请大家把调用端的代码也写上,应该不仅仅是LoadLibrary函数而已,再有最重要的一点就是:怎样把这个Hook和指定要获取消息的按钮句柄关联起来,那个按钮不是本应用程序的,请高手重点回答这里,谢谢!
展开
 我来答
百度网友1d8e8b9
2010-05-31 · TA获得超过913个赞
知道小有建树答主
回答量:589
采纳率:60%
帮助的人:334万
展开全部
你需要截获 按钮 HWND 的 WM_LBUTTONDOWN 函数。

好几种方法实现。

比较简单的一种:

采用SetWindowLong子类化该HWND,即设置该窗口的消息处理函数,然后判断消息是不是按钮被按下了,做好处理之后再去调用老的消息处理函数。
但是,每个进程都有各自的私有4G空间,而你要截获的是远进程窗口消息,因此,你不能简单的直接使用SetWindowLong,因为你传过去的参数,对于远进程来说,是没有意义的。
因此,第一步,你需要将实现写入DLL,然后将DLL注入远进程。(注,DLL的DLLMain函数中实现SetWindowLong等实现)。

这种方法要比全局钩子的方法效率高。而且也很容易写。
夺魂狼剑
2010-05-22 · TA获得超过1273个赞
知道小有建树答主
回答量:796
采纳率:0%
帮助的人:817万
展开全部
我写了一个框架,你只需把响应动作添加到回调函数中即可。
导出函数都已经写好了,可以在主程序中LoadLibrary动态加载调用。

#include <windows.h>

// 建立数据段
#pragma data_seg("HookData")
HHOOK g_hHook = NULL; // 钩子句柄
HINSTANCE g_hInstDLL = NULL; // 模块句柄
#pragma data_seg()

// 设置数据段为可读可写可共享
#pragma comment(linker,"/SECTION:HookData,RWS")

// 入口函数
BOOL APIENTRY DllMain(HINSTANCE hInstDLL,
DWORD fdwReason,
LPVOID lpvReserved)
{
if(fdwReason == DLL_PROCESS_ATTACH)
g_hInstDLL = hInstDLL; // 初始化模块句柄
return TRUE;
}

// 钩子回调函数
LRESULT WINAPI HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// TODO: 在这里添加响应动作

// 将事件传递到下一个钩子
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

// 安装钩子
extern "C" __declspec(dllexport) DWORD InstallHook(void)
{
DWORD dwRet = 0;
g_hHook = SetWindowsHookEx(WH_MOUSE, HookProc, g_hInstDLL, 0);
if(g_hHook == NULL)
dwRet = GetLastError();
return dwRet;
}

// 卸载钩子
extern "C" __declspec(dllexport) DWORD KillHook(void)
{
if(UnhookWindowsHookEx(g_hHook))
return 0;
else
return GetLastError();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maydayhuan
2010-05-22 · TA获得超过148个赞
知道小有建树答主
回答量:299
采纳率:57%
帮助的人:138万
展开全部
SetWindowsHookEx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z8612230
2010-05-22
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
4125
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勇子同学
2010-05-17 · 超过13用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:38.8万
展开全部
程序发你邮箱,如果有用,请加分;谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 5条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式