a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c# 鉤子學習筆記

2020-01-24 03:44:16
字體:
來源:轉載
供稿:網友
包括系統鉤子和線程鉤子,或者叫全局鉤子和私有鉤子。系統鉤子需要一個單獨的DLL,這個地方耽誤了不少時間,網上有說可以不用單獨DLL的。
現在開始貼代碼,代碼參照了紅黑聯盟中的一篇文章。
復制代碼 代碼如下:

public class SetHook
{
public class HookTypes
{
/// <summary>
/// 鉤子類型
/// </summary>
public enum HookType
{
WH_JOURNALRECORD = 0,//對寄送至消息隊列的輸入消息進行記錄
WH_GETMESSAGE = 3,//對寄送至消息隊列的消息進行監視
WH_JOURNALPLAYBACK = 1,//對此前由WH_JOURNALRECORD 掛鉤處理過程紀錄的消息進行寄送
WH_CALLWNDPROC = 4,//在系統將消息發送至目標窗口處理過程之前,對該消息進行監視
WH_CBT = 5,//接受對CBT應用程序有用的消息
WH_MSGFILTER = -1,//監視由對話框、消息框、菜單條、或滾動條中的輸入事件引發的消息
WH_SYSMSGFILTER = 6,//監視由對話框,消息框,菜單條,滾動條中的輸入事件引發的消息
//8
WH_DEBUG = 9,//對其他鉤子處理過程進行調試
WH_SHELL = 10,//接受對外殼應用程序有用的通知
WH_FOREGROUNDIDLE = 11,//當應用程序的前臺線程即將進入空閑狀態時被調用,它有助于在空閑時間內執行低優先級的任務
#region 鼠標和鍵盤事件
/// <summary>
/// 對擊鍵消息進行監視
/// </summary>
WH_KEYBOARD = 2,
/// <summary>
/// 只能在windows NT中被安裝,用來對底層的鍵盤輸入事件進行監視
/// </summary>
WH_KEYBOARD_LL = 13,
/// <summary>
/// 對鼠標消息進行監視
/// </summary>
WH_MOUSE = 7,
/// <summary>
/// 只能在windows NT中被安裝,用來對底層鼠標事件進行監視
/// </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"> 鉤子函數地址</param>
/// <param name="hInstance">應用程序實例的句柄。標識包含lpfn所指的子程的DLL</param>
/// <param name="threadId">安裝鉤子后想監控的線程的ID號, 如果為0,鉤子子程與所有的線程關聯,即為全局鉤子</param>
/// <returns>返回參數為鉤子句柄,失敗為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>
/// 繼續下一個鉤子
/// </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>
/// 獲取當前線程編號
/// </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(); 應對GetCurrentThreadId()的過時
int hookId = 0;
object hookId_ = SetWindowsHookEx(this.hooktyp, this.hookproc, IntPtr.Zero, GetCurrentThreadId());
if (hookId_ != null)
{
hookId = (int)hookId_;
}
return hookId;
}
    //系統鉤子和這差不多,安裝鉤子的時候后兩個參數不一樣
}
}

調用我新建了一個類,方便調用線程或者系統鉤子,這里就不貼了
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新日韩av| 日本久久网 | 午夜激情网 | 成人午夜av | 国产一区二区三区不卡在线观看 | 九九九久久国产免费 | 亚洲自拍一区在线 | 日韩三区在线观看 | 国产成人精品a视频 | 国产欧美精品一区二区三区四区 | 欧美日在线 | 成人精品鲁一区一区二区 | 九九热视频精品在线 | 欧美精品久久久 | 蜜臀av国产精品久久久久 | 欧美一区2区三区4区公司二百 | 爱爱视频天天看 | 精品国产一区二区三区久久 | 免费日本视频 | 成人免费福利 | 忘忧草精品久久久久久久高清 | 日韩在线视频一区二区三区 | 国产精品久久嫩一区二区免费 | 男女羞羞视频免费观看 | 成人免费视频网站在线观看 | 亚洲一区二区三区四区五区中文 | 欧美精品久久久久久精华液 | 亚洲欧美另类在线观看 | 久久亚洲精品国产亚洲老地址 | 韩国在线一区 | 免费国产一区二区 | 91精品国产综合久久久久久漫画 | 99精品国产高清一区二区麻豆 | 国产亚洲成av人片在线观看桃 | 久久久国产精品入口麻豆 | 国产不卡视频在线观看 | 日韩成人免费在线 | 日韩精品久久久久久 | 91成人在线免费视频 | 国产精品久久久久久久久久久久冷 | 日韩欧美在线一区二区 |