达达's 胡搞瞎搞工作室

此Blog搬到www.unbe.cn 去了,要找我讨论问题请到我的新Blog

对《C#实现系统钩子》的补充(2006-3-22 新增.NET 2.0示例)

因为在上篇文章《C#实现系统钩子》中个人疏忽,少了些关键信息,在此统一补充说明。

补充HookType枚举值,很抱歉一时疏忽忘记写出来,这些值可以在Win32 API 的相关头文件中找到,有LL字样的就是低级钩子:

        
public   enum  HookTypes:  int
        
{
            WH_JOURNALRECORD 
=   0
,
            WH_JOURNALPLAYBACK 
=   1
,
            WH_KEYBOARD 
=   2
,
            WH_GETMESSAGE 
=   3
,
            WH_CALLWNDPROC 
=   4
,
            WH_CBT 
=   5
,
            WH_SYSMSGFILTER 
=   6
,
            WH_MOUSE 
=   7
,
            WH_HARDWARE 
=   8
,
            WH_DEBUG 
=   9
,
            WH_SHELL 
=   10
,
            WH_FOREGROUNDIDLE 
=   11
,
            WH_CALLWNDPROCRET 
=   12
,        
            WH_KEYBOARD_LL 
=   13
,
            WH_MOUSE_LL 
=   14
        
        }


虽然上篇文章已经有但是还是要重点重复说明下CallNextHookEx函数,这个函数的功能是在执行完系统钩子的回调函数后接着调用下一个钩子函数,当设置的钩子是底层键盘或者鼠标钩子时如果不这么做将会时键盘和鼠标"失灵"。

        [DllImport("user32.dll")]
        
public static extern int CallNextHookEx(IntPtr hookHandle, int nCode, IntPtr wParam, IntPtr lParam);

这个函数第一个参数是钩子的句柄,在创建钩子时返回来的那个就是,后面3个参数和钩子回调函数的3个参数一一对应,照传就可以。

因为公司现在装得是VS2005所以我只能先用VS2005做个试验程序了,这个程序功能是锁定鼠标一定时间,需要有.NET Framework 2.0 Runtime才能运行,我会尽快找台装VS2003的电脑做个.NET 1.1的范例的。

可执行文件:https://files.cnblogs.com/BG5SBK/HookTest_NET2_Bin.rar
项目文件:https://files.cnblogs.com/BG5SBK/HookTest_NET2_Source.rar
系统钩子文件:https://files.cnblogs.com/BG5SBK/LowLevelHook.rar


如果网友在使用这个系统钩子时有遇到什么问题欢迎指出与交流。

posted on 2006-03-22 09:21  BG5SBK  阅读(2966)  评论(8编辑  收藏  举报

导航