搜集了许多的资料,也作了各类尝试,可是还不是很明白具体的分类.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 ,具体信息参考链接.