全局钩子和局部钩子
搜集了许多的资料,也做了各种尝试,但是还不是很明白具体的分类.
根据目前所掌握的总结一下:
局部钩子:
SetWindowsHookEx(User32.HookType.WH_KEYBOARD, MouseHookProced,0, AppDomain.GetCurrentThreadId());注意事项:第一个参数是WH_KEYBOARD类似的局部钩子参数,
第二个是回调函数,可以再当前DLL(exe)中也可以在其他的DLL中
第三个参数可设为0就可以,可能是忽略这个参数了吧.
第四个参数是当前线程的ID,只在当前线程中有效.
全局钩子:
hHook = SetWindowsHookEx(User32.HookType.WH_KEYBOARD_LL, MouseHookProced, (IntPtr)0, 0);第三个参数还是可以设置为0,
第四个参数必须设为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 ,具体信息参考连接.