首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库C#高级应用

在C#中使用钩子来处理消息的方法

减小字体 增大字体 作者:不详  来源:转载  发布时间:2011-02-05 21:03:03

本文讲解了在C#中使用钩子技术处理消息的方法。

1、声明钩子函数代理:

public   delegate   IntPtr   HookProc(int   nCode,   IntPtr   wParam,   IntPtr   lParam); 

2、声明API函数:

[DllImport("user32.dll",   CharSet=CharSet.Auto)]
        public   static   extern   IntPtr   SetWindowsHookEx(int   hookid,   HookProc   pfnhook,   IntPtr   hinst,   int   threadid); 

[DllImport("user32.dll",   CharSet=CharSet.Auto,   ExactSpelling=true)]      
        public   static   extern   bool   UnhookWindowsHookEx(IntPtr   hhook);

[DllImport("user32.dll",   CharSet=CharSet.Auto,   ExactSpelling=true)]      
        public   static   extern   IntPtr   CallNextHookEx(IntPtr   hhook,   int   code,   IntPtr   wparam,   IntPtr   lparam);

[DllImport("kernel32.dll",   ExactSpelling=true,   CharSet=CharSet.Auto)]      
        public   static   extern   int   GetCurrentThreadId();

public   const   int   WH_MSGFILTER   =   -1;

3、写你自己的HookProc代理实现方法,如MyHookProc

public   IntPtr   MyHookProc(int   nCode,   IntPtr   wParam,   IntPtr   lParam)       
        {      
              //...你的代码       
              return   CallNextHookEx(iHookHandle,   code,   wparam,   lparam);       
        }

4、为你的类声明一个Hook   Handle和非托管的钩子线程地址:

private   IntPtr   _iHookHandle=IntPtr.Zero;
        private   GCHandle   _hookProcHandle;

5、在合适的地方安装你的钩子

HookProc   hookProc   =   new   HookProc(MyHookProc);
        _hookProcHandle   =   GCHandle.Alloc(hookProc);
        iHookHandle   =   SetWindowsHookEx(WH_MSGFILTER,   hookProc,  IntPtr.Zero,   .GetCurrentThreadId());
        if   (iHookHandle   ==   IntPtr.Zero)   throw   new   System.Exception("没有足够权限安装钩子!");

6、在合适的地方卸载你的钩子

if   (iHookHandle!=IntPtr.Zero)
           UnhookWindowsHookEx(iHookHandle); 
         _hookProcHandle.Free();
         iHookHandle   =   IntPtr.Zero; 


本文源自:翔宇亭——IT乐园(http://www.biye5u.com),转载请保留此信息!

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.