c hook鉤子的使用

2021-08-15 15:06:00 字數 2566 閱讀 8321

一般軟體都要輸入序列號(sn),而大家平時用的最多的恐怕是盜版軟體,通常盜版軟體的序列號(sn)都儲存成:***xx-***xx-***x-***x的形式。

既然是要處理複製的序列號,那麼我們肯定要用到和剪貼簿相關的東西了。剪貼簿,還好這個我以前在c#中用過n次了,不用再查windows api了。c#裡面本來就提供了clipboard這個類。

於是就用到了string clipboard.gettext()這個靜態方法,將剛才複製的帶-的序列號取出來,然後用個string型別的變數strkeys儲存在我的程式中,以便使用。

第一步,從剪貼簿裡面取資料,我們就完成了。

接著,我們該考慮怎麼處理我們的資料了,我們的資料最後是要寫到幾個連續的文字框中的,那麼我們可以考慮通過string.split(char,string splitoption)這個方法將序列號分割成幾個子字串,然後再通過windows api講文字輸出到相應的textbox控制代碼上。但是這樣做無疑增加了程式的難度,幾個連續的文字框的切換,使用tab鍵就能做到了,然後將文字輸出到文字框中,直接讓鍵盤打出來就ok了。那麼很明顯,我們只需要將我們要按的鍵模擬出來就行了,這個時候我首先想到的是windows api中鍵盤模擬事件keybd_event,於是我開始在msdn中查詢keybd_event方法,方法中有個keyeventf_keyup這個引數,但是我不知道他相應的值,於是我開始查詢這個長整形的值。但是始終都找不到,就在我在msdn中查詢keyup相關的東西的時候,我突然發現了system.windows.form.sendkeys這個類。原來.net framework已經將keybd_event這個非託管物件的方法封裝到sendkeys這個類中了,直接使用sendkeys這個類就可以模擬鍵盤操作了。

再查詢tab鍵的寫法就是。

那麼我只要將原來文字strkeys中的'-'全部轉換成然後再交給sendkeys這個類來處理,這個程式就基本完成了。

於是有了

strkeys.replace("-", "");

sendkeys.send(strkeys);

這兩行**。

這樣就有了我的程式的主過程:

private void processhotkey()//主處理程式

");sendkeys.send(strkeys);

}

但是我們怎麼通過快捷鍵來觸發,來完成這個過程了。

要設定快捷鍵必須使用user32.dll下面的兩個方法。

bool registerhotkey(

hwnd hwnd,

int id,

uint fsmodifiers,

uint vk

);

bool unregisterhotkey(

hwnd hwnd,

int id

);

轉換成c#**,那麼首先就要引用命名空間system.runtime.interopservices;來載入非託管類user32.dll。於是有了:

[dllimport("user32.dll", setlasterror=true)] 

public static extern bool registerhotkey(

intptr hwnd, // handle to window 

int id, // hot key identifier 

keymodifiers fsmodifiers, // key-modifier options 

keys vk // virtual-key code 

); [dllimport("user32.dll", setlasterror=true)] 

public static extern bool unregisterhotkey(

intptr hwnd, // handle to window 

int id // hot key identifier 

);[flags()] 

public enum keymodifiers 

這是註冊和解除安裝全域性快捷鍵的方法,那麼我們只需要在form_load的時候加上註冊快捷鍵的語句,在formclosing的時候解除安裝全域性快捷鍵。同時,為了保證剪貼簿的內容不受到其他程式呼叫剪貼簿的干擾,在form_load的時候,我先將剪貼簿裡面的內容清空。

於是有了:

private void form1_load(object sender, system.eventargs e)

private void form1_formclosing(object sender, formclosingeventargs e)

那麼我們在別的視窗,怎麼讓按了快捷鍵以後呼叫我的主過程processhotkey()呢?

那麼我們就必須重寫wndproc()方法,通過監視系統訊息,來呼叫過程:(

關注)protected override void wndproc(ref message m)//監視windows訊息

base.wndproc(ref m);

}

mysql 鉤子 svn鉤子的使用案例

svn鉤子的使用案例 我在這一篇博文中提到,svn鉤子指令碼是svn非常實用重要的功能,在工作中,會經常需要用到svn鉤子指令碼以實現除了svn自帶功能之外的附加功能,那麼這一篇博文,我們就舉例演示一下,svn鉤子是用來做什麼的,以及怎麼用。svn鉤子的功能 svn鉤子是乙個指令碼,它的具體寫法和l...

鉤子 HOOK 機制的使用

wh mouse,gethookinfo,hinstance,getcurrentthreadid mymousehook.callbackfun callbackf mymousehook.isrun not mymousehook.isrun end end procedure uninstal...

鉤子 HOOK 機制的使用

wh mouse,gethookinfo,hinstance,getcurrentthreadid mymousehook.callbackfun callbackf mymousehook.isrun not mymousehook.isrun end end procedure uninstal...