當前位置:編程學習大全網 - 編程語言 - c# 程序鉤子的問題

c# 程序鉤子的問題

C#是面向對象的編程語言,所以鉤子是寫在類中的。

///?<summary>

///?設置的鉤子類型

///?</summary>

public?enum?HookType?:?int

{

///?<summary>

///?WH_MSGFILTER?和?WH_SYSMSGFILTER?Hooks使我們可以把守菜單,遷移轉變?

///條,消息框,對話框消息並且發明用戶應用ALT+TAB?or?ALT+ESC?組合鍵切換窗口。?

///WH_MSGFILTER?Hook只能把守傳遞到菜單,遷移轉變條,消息框的消息,以及傳遞到通?

///過安裝了Hook子過程的應用法度建樹的對話框的消息。WH_SYSMSGFILTER?Hook?

///把守所有應用法度消息。?

///WH_MSGFILTER?和?WH_SYSMSGFILTER?Hooks使我們可以在模式輪回時代?

///過濾消息,這等價於在主消息輪回中過濾消息。?

///經由過程調用CallMsgFilter?function可以直接的調用WH_MSGFILTER?Hook。經由過程應用這?

///個函數,應用法度可以或許在模式輪回時代應用雷同的代碼去過濾消息,如同在主消息循?

///環裏壹樣

///?</summary>

WH_MSGFILTER?=?-1,

///?<summary>

///?WH_JOURNALRECORD?Hook用來把守和記錄輸入事務。典範的,可以應用這?

///個Hook記錄連氣兒的鼠標和鍵盤事務,然後經由過程應用WH_JOURNALPLAYBACK?Hook?

///往返放。WH_JOURNALRECORD?Hook是全局Hook,它不克不及象線程特定Hook壹樣?

///應用。WH_JOURNALRECORD是system-wide?local?hooks,它們不會被打針到任何行?

///程地址空間

///?</summary>

WH_JOURNALRECORD?=?0,

///?<summary>

///?WH_JOURNALPLAYBACK?Hook使應用法度可以插入消息到體系消息隊列。可?

///以應用這個Hook回放經由過程應用WH_JOURNALRECORD?Hook記錄下來的連氣兒的鼠?

///標和鍵盤事務。只要WH_JOURNALPLAYBACK?Hook已經安裝,正常的鼠標和鍵盤?

///事務就是無效的。WH_JOURNALPLAYBACK?Hook是全局Hook,它不克不及象線程特定?

///Hook壹樣應用。WH_JOURNALPLAYBACK?Hook返回超時價,這個值告訴體系在處?

///理來自回放Hook當前消息之前須要守候多長時候(毫秒)。這就使Hook可以把握實?

///時事務的回放。WH_JOURNALPLAYBACK是system-wide?local?hooks,它們不會被?

///打針到任何行程地址空間

///?</summary>

WH_JOURNALPLAYBACK?=?1,

///?<summary>

///?在應用法度中,WH_KEYBOARD?Hook用來把守WM_KEYDOWN?and?

///WM_KEYUP消息,這些消息經由過程GetMessage?or?PeekMessage?function返回。可以使?

///用這個Hook來把守輸入到消息隊列中的鍵盤消息

///?</summary>

WH_KEYBOARD?=?2,

///?<summary>

///?應用法度應用WH_GETMESSAGE?Hook來把守從GetMessage?or?PeekMessage函?

///數返回的消息。妳可以應用WH_GETMESSAGE?Hook去把守鼠標和鍵盤輸入,以及?

///其它發送到消息隊列中的消息

///?</summary>

WH_GETMESSAGE?=?3,

///?<summary>

///?把守發送到窗口過程的消息,體系在消息發送到接管窗口過程之前調用

///?</summary>

WH_CALLWNDPROC?=?4,

///?<summary>

///?在以下事務之前,體系都邑調用WH_CBT?Hook子過程,這些事務包含:?

///1.?激活,建樹,燒毀,最小化,最大化,移動,改變尺寸等窗口事務;?

///2.?完成體系指令;?

///3.?來自體系消息隊列中的移動鼠標,鍵盤事務;?

///4.?設置輸入核苦衷務;?

///5.?同步體系消息隊列事務。

///Hook子過程的返回值斷定體系是否容許或者防止這些操縱中的壹個

///?</summary>

WH_CBT?=?5,

///?<summary>

///?WH_MSGFILTER?和?WH_SYSMSGFILTER?Hooks使我們可以把守菜單,遷移轉變?

///條,消息框,對話框消息並且發明用戶應用ALT+TAB?or?ALT+ESC?組合鍵切換窗口。?

///WH_MSGFILTER?Hook只能把守傳遞到菜單,遷移轉變條,消息框的消息,以及傳遞到通?

///過安裝了Hook子過程的應用法度建樹的對話框的消息。WH_SYSMSGFILTER?Hook?

///把守所有應用法度消息。?

///WH_MSGFILTER?和?WH_SYSMSGFILTER?Hooks使我們可以在模式輪回時代?

///過濾消息,這等價於在主消息輪回中過濾消息。?

///經由過程調用CallMsgFilter?function可以直接的調用WH_MSGFILTER?Hook。經由過程應用這?

///個函數,應用法度可以或許在模式輪回時代應用雷同的代碼去過濾消息,如同在主消息循?

///環裏壹樣

///?</summary>

WH_SYSMSGFILTER?=?6,

///?<summary>

///?WH_MOUSE?Hook把守從GetMessage?或者?PeekMessage?函數返回的鼠標消息。?

///應用這個Hook把守輸入到消息隊列中的鼠標消息

///?</summary>

WH_MOUSE?=?7,

///?<summary>

///?當調用GetMessage?或?PeekMessage?來從消息隊列種查詢非鼠標、鍵盤消息時

///?</summary>

WH_HARDWARE?=?8,

///?<summary>

///?在體系調用體系中與其它Hook接洽關系的Hook子過程之前,體系會調用?

///WH_DEBUG?Hook子過程。妳可以應用這個Hook來決意是否容許體系調用與其它?

///Hook接洽關系的Hook子過程

///?</summary>

WH_DEBUG?=?9,

///?<summary>

///?外殼應用法度可以應用WH_SHELL?Hook去接管首要的通知。當外殼應用法度是?

///激活的並且當頂層窗口建樹或者燒毀時,體系調用WH_SHELL?Hook子過程。?

///WH_SHELL?***有5鐘景象:?

///1.?只要有個top-level、unowned?窗口被產生、起感化、或是被摧毀;?

///2.?當Taskbar須要重畫某個按鈕;?

///3.?當體系須要顯示關於Taskbar的壹個法度的最小化情勢;?

///4.?當今朝的鍵盤布局狀況改變;?

///5.?當應用者按Ctrl+Esc去履行Task?Manager(或雷同級此外法度)。?

///遵守常規,外殼應用法度都不接管WH_SHELL消息。所以,在應用法度可以或許接?

///收WH_SHELL消息之前,應用法度必須調用SystemParametersInfo?function註冊它自?

///己

///?</summary>

WH_SHELL?=?10,

///?<summary>

///?當應用法度的前臺線程處於余暇狀況時,可以應用WH_FOREGROUNDIDLE?

///Hook履行低優先級的任務。當應用法度的前臺線程可能要變成余暇狀況時,體系就?

///會調用WH_FOREGROUNDIDLE?Hook子過程

///?</summary>

WH_FOREGROUNDIDLE?=?11,

///?<summary>

///?把守發送到窗口過程的消息,體系在消息發送到接管窗口過程之後調用

///?</summary>

WH_CALLWNDPROCRET?=?12,

///?<summary>

///?把守輸入到線程消息隊列中的鍵盤消息

///?</summary>

WH_KEYBOARD_LL?=?13,

///?<summary>

///?把守輸入到線程消息隊列中的鼠標消息

///?</summary>

WH_MOUSE_LL?=?14

}

public?partial?class?Form1?:?Form

{

public?Form1()

{

InitializeComponent();

}

[DllImport("USER32.DLL")]

private?static?extern?int?CallNextHookEx(IntPtr?hhk,?int?nCode,?IntPtr?wParam,?IntPtr?lParam);//導入鉤子函數消息傳遞的方法

[DllImport("USER32.DLL")]

private?static?extern?IntPtr?SetWindowsHookEx(HookType?idHook,?HookProc?lpfn,?IntPtr?hMod,?int?dwThreadId);//導入設置鉤子的方法

[DllImport("user32.dll",?CharSet?=?CharSet.Auto,?CallingConvention?=?CallingConvention.StdCall)]

private?static?extern?bool?UnhookWindowsHookEx(int?idHook);

//導入卸載鉤子的方法

private?delegate?int?HookProc(int?nCode,?int?wParam,?IntPtr?lParam);?//聲明回調函數

///<summary>

///自定義回調函數

///</summary>

private?int?HookCallback(int?nCode,?IntPtr?wParam,?IntPtr?lParam)

{

MessageBox.Show(nCode.ToString());

//鍵盤按下時

if?(nCode?>=?0?&&?wParam?==?(IntPtr)0)

{

int?vkCode?=?Marshal.ReadInt32(lParam);

Keys?key?=?(Keys)vkCode;

MessageBox.Show(key.ToString());

}

return?CallNextHookEx(handle,?nCode,?wParam,?lParam);

}

private?void?Form1_Load(object?sender,?EventArgs?e)

{

//創建鉤子(這個函數的參數妳可以百度找找,C#鉤子研究過但沒成功)

SetWindowsHookEx(params);

}

}

  • 上一篇:同花順軟件怎樣設置年線
  • 下一篇:431金融學綜合教材選擇
  • copyright 2024編程學習大全網