搜了不少关于钩子的帖子.. 但动手试着做时发现有几个问题还是没有搞清楚!
1. SetWindowsHookEx和UnhookWindowsHookEx是放在钩子DLL中, 还是放在调用钩子的应用程序中?放在哪里比较好?
2. 钩子函数HOOK( nCode, wparam, lparam )三个参数是什么意思?
3. 下面2种定义HHOOK的区别是什么?什么时候用第一种, 什么时候要用第二种?
#pragma data_seg("mydata")
HHOOK hHook=NULL;
#pragma data_seg()HHOOK hHook=NULL;
1. SetWindowsHookEx和UnhookWindowsHookEx是放在钩子DLL中, 还是放在调用钩子的应用程序中?放在哪里比较好?
2. 钩子函数HOOK( nCode, wparam, lparam )三个参数是什么意思?
3. 下面2种定义HHOOK的区别是什么?什么时候用第一种, 什么时候要用第二种?
#pragma data_seg("mydata")
HHOOK hHook=NULL;
#pragma data_seg()HHOOK hHook=NULL;
解决方案 »
- 关于CArchive的读取
- 高分求 Office 剪切板问题!
- 关于字体和title bar的疑问。
- 50分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!怎么做到修改不了一个注册表表项?
- 关于CEDIT的简单问题
- 怎么让菜单项可以选择
- 用vc以“resource”方式打开exe文件
- 如何将不同类型的字符串间相互转换,如char,TCHAR,UNICODE...
- 在vc的向导的帮助下生成的类,同样是public,有的前面加上// Attributes
- 急需BMP文件转TIF文件源码,请帮忙!
- 初学者简单问题,取记录集的值
- 在c:\windows\downloaded program files下的文件的扩展名是什么啊?
第二种:只是dll内可用
都可以,通常放在DLL中。2. 钩子函数HOOK( nCode, wparam, lparam )三个参数是什么意思?
Hook ID不同,其含义也不同,查看MSDN中各种ID的说明。3. 下面2种定义HHOOK的区别是什么?什么时候用第一种, 什么时候要用第二种?
全局Hook用第1种,因为全局Hook会在很多不同的进程中被调用,需要用共享数据,否则只有加载Hook的进程中才能得到真正的数据。
2, HOOK( nCode, wparam, lparam ) //参数的含义在不同的钩子过程中是不一样的。
第一个一般是识别码, 后两个参数可以理解为消息函数的参数, 变化比较大。
3. 一般是用第二种比较多。 #pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。
2, HOOK( nCode, wparam, lparam ) //参数的含义在不同的钩子过程中是不一样的。
第一个一般是识别码, 后两个参数可以理解为消息函数的参数, 变化比较大。
3. 一般是用第二种比较多。 #pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。
刚吃完饭回来. 看了下回复
还有点问题没有清楚,
1.如果SetWindowsHookEx和UnhookWindowsHookEx放在DLL中, 那么放
在钩子函数中肯定不合适..放在什么地方最为合适呢? 2.HOOK( nCode, wparam, lparam )这个是自己写的钩子函数要怎么查MSDN?
如果我想在这里截获用户按下F1键的消息,我要怎么通过这3个参数来判断?
(能给点实例代码就最好不过了^^)
在钩子函数中肯定不合适..放在什么地方最为合适呢?
===========================
一般的做法是除了钩子处理函数外还在加两个导出函数,一个用于安装钩子,一个用于除去钩子,这两个API刚好放在这两个函数中。另外SetWindowsHookEx虽然可以放在应用程序中,但是放在DLL中要方便一点,因为这个API第三个参数是钩子处理函数所在模块句柄,其实也就是DLL的模块句柄,如果放在应用程序中你还要获取,放在DLL中,DllMain的参数就有了。
2.HOOK( nCode, wparam, lparam )这个是自己写的钩子函数要怎么查MSDN?
=================
钩子的类型只有那么多,你在MSDN上查SetWindowsHookEx,它在介绍第一个参数时,在解释里面有相应的钩子处理函数的原型
谢谢了, 查了下MSDN, . 还剩下最后一个小问题了
一般的做法是除了钩子处理函数外还在加两个导出函数,一个用于安装钩子,一个用于除去钩子,这两个API刚好放在这两个函数中。
不太理解. 可以详细点吗?
在加两个导出函数. 怎么来写这两个函数才能完成想构造函数和析构函数一样?
如果要用类封装,可以把SetWindowsHookEx放在构造函数里面,UnhookWindowsHookEx放在析构函数里面,然后导出这个类。
意思是给CKeyHookApp加一个构造和析构函数?然后在构造和析构里加上SetWindowsHookEx和UnhookWindowsHookEx吗?
另外提一点,最好用Win32 DLL来做Hook,不要用MFC。