国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

在C#中使用鉤子來處理消息的方法

2023-05-17 11:41:58
字體:
來源:轉載
供稿:網友

本文講解了在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;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特后旗| 英超| 乐山市| 桂平市| 乌拉特前旗| 北安市| 应城市| 鹰潭市| 蒙阴县| 穆棱市| 嵊泗县| 桐城市| 济阳县| 比如县| 兖州市| 商洛市| 平陆县| 米易县| 苍南县| 武宣县| 镇原县| 深圳市| 阜康市| 宜宾县| 乐陵市| 肃北| 和林格尔县| 华安县| 山丹县| 宁远县| 天祝| 濉溪县| 石泉县| 屏东县| 桓台县| 全椒县| 嵊泗县| 莎车县| 广灵县| 兴安县| 永春县|