全局钩子和局部钩子

搜集了许多的资料,也做了各种尝试,但是还不是很明白具体的分类.

根据目前所掌握的总结一下:

局部钩子:

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

等..

 

键盘钩子:

局部钩子:

KeyboardProc参数解析 

首先根据nCode过滤

当使用WH_KEYBOARD设置局部钩子的时候,wParam就是按下的键码.lParam是Keystroke Message Flags,每一位代表一个标志位.可以使用Convert.ToString((int)lParam,2)装换为二进制,判断是否够32位,不够的话补0,然后读取想要的信息.如:10011110000000000000001,可以获取是按下还是弹起.KeyboardProc callback function.第一位是0表示按下,是1表示弹起.

 

全局钩子:

LowLevelKeyboardProc 

WPARAM包含弹起和按下的信息,ncode是0,lparam是一个KBDLLHOOKSTRUCT ,具体信息参考连接.

 

posted @ 2013-12-16 17:22  平常心队长  阅读(1912)  评论(0编辑  收藏  举报