一般軟體都要輸入序列號(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...