HOOK HOOK HOOK

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:14:13
在 B++BUILDER 里面.应该把 SetWindowsHookEx(WH_MOUSE,HookProc,NULL,GetCurrentThreadId()); 写在哪里????????????????

以下全部手打, 自认为写的很认真,很详细, 呵呵, 如果还有不明白随时欢迎
提出来!

首先问一句,你说的是C++ Builder吧, 因为能够调用WIN32API的编程语言很多, 例如汇编, Fortran, VB, C, Java, 甚至脚本语言matlab, ruby等, 不过原理都是一样的, 这里就以C / C++ 来为例吧
-------------------
SetWindowsHookEx一般都是写在你要使用Hook的地方, 在进一步解释之前先简略说明一下Hook相关情况
-------------------
钩子有局部和远程两种类型, 与钩子相关的函数有:
1. 建立钩子:SetWindowsHookEx, 其四个参数分别为钩子类型, 钩子函数地址, 钩子函数所在DLL的实例句柄,安装钩子后想监控的线程的ID号, 返回参数为钩子句柄

2. UnhookWindowsHookEx, 参数只有一个,为要卸载的钩子句柄

3. 钩子函数(名称任意), 三个参数, 具体意义与钩子类型有关

这里以一个例子说明一下:比如你想写一个程序, 当鼠标移到哪里时就在主程序中显示鼠标所在窗口的名称
--------------------
(1)如果鼠标只是局限在窗口内, 那么以上1, 2, 3三个函数均写在运行的主程序中, 比如函数1可以写在按下某个按钮的消息响应函数中,函数 2 写在松开按扭的消息响应函数中,函数 3 只要不写在别的函数中就行, 因为它本生就是一个要定义的独立函数

(2)如果鼠标可以在屏幕任意位置移动, 那么以上函数1, 2位置同(1), 但函数3要写在一个另外写的DLL里, 因为此时安装的是全局钩子, 为了达到获取窗口名称的目的, 在DLL里可能还要做一些其他工作,比如设置共享段, 关于这些这里不细说了

------------------------

关于钩子,以上只是简单说了一下, 不过, 使用钩子确实也很简单, 因为主要的工作还是在钩子函数里