日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# 钩子学习笔记

發(fā)布時(shí)間:2025/3/14 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 钩子学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  今天弄了一下c#的鉤子,沒弄好,但是鉤子安裝成功,可以捕獲鍵盤事件。包括系統(tǒng)鉤子和線程鉤子,或者叫全局鉤子和私有鉤子。系統(tǒng)鉤子需要一個(gè)單獨(dú)的DLL,這個(gè)地方耽誤了不少時(shí)間,網(wǎng)上有說可以不用單獨(dú)DLL的。

  現(xiàn)在開始鐵代碼,代碼參照了紅黑聯(lián)盟中的一篇文章。

public class SetHook
??? {
??????? public class HookTypes
??????? {
??????????? /// <summary>
??????????? /// 鉤子類型
??????????? /// </summary>
??????????? public enum HookType
??????????? {
??????????????? WH_JOURNALRECORD = 0,//對寄送至消息隊(duì)列的輸入消息進(jìn)行記錄
??????????????? WH_GETMESSAGE = 3,//對寄送至消息隊(duì)列的消息進(jìn)行監(jiān)視

??????????????? WH_JOURNALPLAYBACK = 1,//對此前由WH_JOURNALRECORD 掛鉤處理過程紀(jì)錄的消息進(jìn)行寄送
??????????????? WH_CALLWNDPROC = 4,//在系統(tǒng)將消息發(fā)送至目標(biāo)窗口處理過程之前,對該消息進(jìn)行監(jiān)視
??????????????? WH_CBT = 5,//接受對CBT應(yīng)用程序有用的消息

??????????????? WH_MSGFILTER = -1,//監(jiān)視由對話框、消息框、菜單條、或滾動條中的輸入事件引發(fā)的消息
??????????????? WH_SYSMSGFILTER = 6,//監(jiān)視由對話框,消息框,菜單條,滾動條中的輸入事件引發(fā)的消息

??????????????? //8
??????????????? WH_DEBUG = 9,//對其他鉤子處理過程進(jìn)行調(diào)試
??????????????? WH_SHELL = 10,//接受對外殼應(yīng)用程序有用的通知
??????????????? WH_FOREGROUNDIDLE = 11,//當(dāng)應(yīng)用程序的前臺線程即將進(jìn)入空閑狀態(tài)時(shí)被調(diào)用,它有助于在空閑時(shí)間內(nèi)執(zhí)行低優(yōu)先級的任務(wù)
??????????????? #region 鼠標(biāo)和鍵盤事件
??????????????? /// <summary>
??????????????? /// 對擊鍵消息進(jìn)行監(jiān)視
??????????????? /// </summary>
??????????????? WH_KEYBOARD = 2,
??????????????? /// <summary>
??????????????? /// 只能在windows NT中被安裝,用來對底層的鍵盤輸入事件進(jìn)行監(jiān)視
??????????????? /// </summary>
??????????????? WH_KEYBOARD_LL = 13,
??????????????? /// <summary>
??????????????? /// 對鼠標(biāo)消息進(jìn)行監(jiān)視
??????????????? /// </summary>
??????????????? WH_MOUSE = 7,
??????????????? /// <summary>
??????????????? /// 只能在windows NT中被安裝,用來對底層鼠標(biāo)事件進(jìn)行監(jiān)視
??????????????? /// </summary>
??????????????? WH_MOUSE_LL = 14,
??????????????? #endregion
??????????? }
??????? }
??????? public abstract class Hooks : HookTypes
??????? {
??????????? public delegate int HookProc(int nCode, int wParam, IntPtr IParam);
??????????? /// <summary>
??????????? /// 安裝鉤子
??????????? /// </summary>
??????????? /// <param name="idHook">鉤子類型,即它處理的消息類型</param>
??????????? /// <param name="lpfn"> 鉤子函數(shù)地址</param>
??????????? /// <param name="hInstance">應(yīng)用程序?qū)嵗木浔?biāo)識包含lpfn所指的子程的DLL</param>
??????????? /// <param name="threadId">安裝鉤子后想監(jiān)控的線程的ID號, 如果為0,鉤子子程與所有的線程關(guān)聯(lián),即為全局鉤子</param>
??????????? /// <returns>返回參數(shù)為鉤子句柄,失敗為NULL</returns>
??????????? [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
??????????? public static extern int SetWindowsHookEx(HookType hooktype, HookProc lpfn, IntPtr hInstance, int threadId);
??????????? /// <summary>
??????????? /// 卸載鉤子
??????????? /// </summary>
??????????? /// <param name="idHook">要卸載的鉤子句柄</param>
??????????? /// <returns></returns>
??????????? [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
??????????? public static extern bool UnhookWindowsHookEx(int idHook);
??????????? /// <summary>
??????????? /// 繼續(xù)下一個(gè)鉤子
??????????? /// </summary>
??????????? /// <param name="idHook"></param>
??????????? /// <param name="nCode"></param>
??????????? /// <param name="wParam"></param>
??????????? /// <param name="IParam"></param>
??????????? /// <returns></returns>
??????????? [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
??????????? public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr IParam);
??????????? /// <summary>
??????????? /// 獲取當(dāng)前線程編號
??????????? /// </summary>
??????????? /// <returns></returns>
??????????? [DllImport("kernel32")]
??????????? public static extern int GetCurrentThreadId();

??????????? #region
??????????? /// <summary>
??????????? /// 委托對象???

/// </summary>
??????????? public HookProc proc;
??????????? public abstract int SetWindowsHookEx();

??????????? #endregion
??????? }
??????? public class AddHook : Hooks
??????? {
??????????? HookType hooktyp;
??????????? HookProc hookproc;
??????????? public AddHook(HookType _hooktype, HookProc _hookproc)
??????????? {
??????????????? this.hooktyp = _hooktype;
??????????????? this.hookproc = _hookproc;
??????????? }
??????????? public int AddPrivateHook()
??????????? {
??????????????? return SetWindowsHookEx();
??????????? }
??????????? /// <summary>
??????????? /// 線程鉤子
??????????? /// </summary>
??????????? /// <returns></returns>
??????????? public override int SetWindowsHookEx()
??????????? {
??????????????? //int theadId = System.Threading.Thread.CurrentThread.ManagedThreadId(); 應(yīng)對GetCurrentThreadId()的過時(shí)
??????????????? int hookId = 0;
??????????????? object hookId_ = SetWindowsHookEx(this.hooktyp, this.hookproc, IntPtr.Zero, GetCurrentThreadId());
??????????????? if (hookId_ != null)
??????????????? {
??????????????????? hookId = (int)hookId_;
??????????????? }
??????????????? return hookId;
??????????? }

    //系統(tǒng)鉤子和這差不多,安裝鉤子的時(shí)候后兩個(gè)參數(shù)不一樣
??????? }
??? }

?? 調(diào)用我新建了一個(gè)類,方便調(diào)用線程或者系統(tǒng)鉤子,這里就不貼了

?? 望提出寶貴建議

轉(zhuǎn)載于:https://www.cnblogs.com/zzjjgg/archive/2011/04/10/2011800.html

總結(jié)

以上是生活随笔為你收集整理的c# 钩子学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。