蒐集了許多的資料,也作了各類嘗試,可是還不是很明白具體的分類.html
根據目前所掌握的總結一下:windows
局部鉤子:函數
SetWindowsHookEx(User32.HookType.WH_KEYBOARD, MouseHookProced,0, AppDomain.GetCurrentThreadId());注意事項:第一個參數是WH_KEYBOARD相似的局部鉤子參數,spa
第二個是回調函數,能夠再當前DLL(exe)中也能夠在其餘的DLL中線程
第三個參數可設爲0就能夠,多是忽略這個參數了吧.code
第四個參數是當前線程的ID,只在當前線程中有效.htm
全局鉤子:blog
hHook = SetWindowsHookEx(User32.HookType.WH_KEYBOARD_LL, MouseHookProced, (IntPtr)0, 0);第三個參數仍是能夠設置爲0,get
第四個參數必須設爲0,即設置爲全局鉤子回調函數
一直想找到一個能夠使用WH_KEYBOARD設置全局鉤子的方法,過程當中也設置了第三個參數,DLL的HID,可是hHook都是0,設置失敗.應該有這樣的方法的,再找找.
有的資料也說net不支持.
參考資料: http://www.cnblogs.com/firstyi/archive/2008/01/08/1030761.html
等..
局部鉤子:
首先根據nCode過濾
當使用WH_KEYBOARD設置局部鉤子的時候,wParam就是按下的鍵碼.lParam是Keystroke Message Flags,每一位表明一個標誌位.能夠使用Convert.ToString((int)lParam,2)裝換爲二進制,判斷是否夠32位,不夠的話補0,而後讀取想要的信息.如:10011110000000000000001,能夠獲取是按下仍是彈起.KeyboardProc callback function.第一位是0表示按下,是1表示彈起.
全局鉤子:
WPARAM包含彈起和按下的信息,ncode是0,lparam是一個KBDLLHOOKSTRUCT ,具體信息參考鏈接.