本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识
代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它...
写这个教程只是为了让玩家更好地体验所爱的单机游戏,顺便学到些逆向知识,我不会用网络游戏做示范,请自重
本章内容主要是认识钩子(hook)
(微软的解释:)钩子(hook)是一种截获事件的机制,一个截获某种事件的函数叫做钩子过程(hook procedure),钩子过程可以处理它接收的每个事件,然后可以改变或取消这个事件
微软提供了API来实现一些钩子:
// 安装钩子,参数是钩子类型,钩子过程,钩子过程所在模块句柄,钩子的目标线程ID
// 如果dwThreadId是0则会安装全局钩子(截获所有进程所有线程的事件)
// 这时除了几种钩子类型,其他的必须把钩子过程写在DLL中,系统会把这个DLL注入到其他进程(本章不讲)
// 返回钩子句柄
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook,
_In_ HOOKPROC lpfn,
_In_ HINSTANCE hMod,
_In_ DWORD dwThreadId
// 卸载钩子,参数是钩子句柄
BOOL WINAPI UnhookWindowsHookEx(
_In_ HHOOK hhk
// 把事件传递给下一个钩子
LRESULT WINAPI CallNextHookEx(
_In_opt_ HHOOK hhk,
_In_ int nCode,
_In_ WPARAM
本章内容主要是认识钩子(hook)(微软的解释:)钩子(hook)是一种截获事件的机制,一个截获某种事件的函数叫做钩子过程(hook procedure),钩子过程可以处理它接收的每个事件,然后可以改变或取消这个事件
翻MSDN可知,
鼠标
钩子
类型有两个,一个是WH_MOUSE,另一个是WH_MOUSE_LL,
至于它们的区别,百度了一下:
1.WH_MOUSE只能监控
钩子
所在模块的
鼠标
事件。
2.WH_MOUSE_LL可以截获整个系统所有模块的
鼠标
事件。
---------------------------------------------------------------------------
本人往后博客说明,为了博客的美观好看,同时兼顾实用,我会先贴代码截图,后面再附加代码内容(可以拷贝的,代码没错,还是报出错了,注意下格式)
相信很多朋友在寻找关于c++获取
键盘
和
鼠标
事件代码时,网上好多代码都是不完善的,
遇到如下情况:
例如1:明明写了
鼠标
左键点击打印一句话,
鼠标
左键点击要么是清屏要么就看不到打印的话,只有在按下
鼠标
中间后点击
鼠标
左键会有一次输出打印
例如2:
鼠标
点击,不管是左键还是右键点击有效果,但是无法判断是单机还是双击或者是
鼠标
滚轮滚动