问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-05-23 15:30

我来回答

5个回答

热心网友 时间:2023-10-27 12:01

你需要截获 按钮 HWND 的 WM_LBUTTONDOWN 函数。

好几种方法实现。

比较简单的一种:

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

这种方法要比全局钩子的方法效率高。而且也很容易写。

热心网友 时间:2023-10-27 12:02

我写了一个框架,你只需把响应动作添加到回调函数中即可。
导出函数都已经写好了,可以在主程序中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();
}

热心网友 时间:2023-10-27 12:02

SetWindowsHookEx

热心网友 时间:2023-10-27 12:03

4125

热心网友 时间:2023-10-27 12:04

程序发你邮箱,如果有用,请加分;谢谢!
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
盘点几部世界恐怖惊悚电影,胆小请不要勿看或找人陪同观看 人有它在,天没它大打一个字 天减一笔有什么字? 天字减一笔有哪几个字 清单小粥的做法有? 花式百合清凉粥做法 卡通表现形式 新冠疫情下的大时代 什么叫做专项资金 什么叫做运营资金 c# 关于使用了鼠标钩子MouseHook后的一些问题 VC 全局鼠标钩子 这是人家写好的鼠标钩子,用c#调用的,但是我不会使用后面这个鼠标事件 c# 鼠标钩子MouseHook(全局钩子)的单击事件MouseClick在win7中不兼容,有时能触发有时触发不了 想用MFC写个关闭笔记本屏幕的程序,用低级全局鼠标钩子(WH_MOUSE_LL)和低级全局键盘钩子 谁介绍几个 讲股票好的人名 一起来捉妖飞到一个地方回不去原来那个地方了怎么办? 一起来捉妖 手机设置的高精确度定位但游戏还是要求设置定位? 一起来捉妖地图隐藏位置 一起来捉妖 怎么走到妖灵面前 一起来捉妖我其他城市跑过来的,请问深圳集市在哪? 《一起来捉妖》怎么查看附近的妖灵并且追踪妖灵? 关于查杀calc.EXE病毒问题 win7中的Calc.exe文件在哪 calc.exe应用程序 calc.exe-应用程序错误 calc.exe是什么病毒?任务管理器关不了~ 如何将建立的以姓名命名的快捷方式运行命令calc.exe calc.exe是什么东西 calc.exe是什么进程 如何在C#中使用全局鼠标,键盘Hook 高分求一个用C#写的键盘或鼠标的钩子源代码 VB如何设置全局鼠标勾子 安装鼠标钩子后,右击窗口标题栏程序失去响应 c#怎么用钩子模拟鼠标操作? 用vb做全局鼠标键盘钩子.求助 请问安装鼠标钩子后,点击关闭,最小化或最大化按钮后鼠标被锁住,没反应? LOL怎样录视频?要可以从头到尾的,最好有截图 LOL怎么录制视频。游戏圈里录制按钮已经打开了,为什么左边没有录制按钮了 怎样才能在lol游戏中录制视频 卸防晒霜用什么卸妆水 请问、、擦完防晒、、用什么牌子的卸妆水好、、、请推荐一下 防晒霜需要卸妆吗, 如果需要, 呢用什麽牌子的比较好, 卸妆油,卸妆水,卸妆液, 哪个适合卸防晒霜, 防晒后适合用什么卸妆水 一般平时只用BB霜或防晒霜 之后用什么卸妆好 卸妆水?还是卸妆油?卸妆液... 物理防晒霜卸妆,求推荐卸妆水 14岁,平时用一些防晒霜,但很多人说防晒霜要卸的,想问一下有什么好用的卸妆水,最好屈臣氏有卖的 与ryan相对的情侣名是什么 男生的英文名叫Ryan,我想找一个跟Ryan配对的女生英文名。 瑞思的英语是什么?
  • 焦点

最新推荐

猜你喜欢

热门推荐