如题:我在MSDN找过,找不到相应的说明:如:
问题一: public struct KeyBoardDllHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}如KeyBoardDllHookStruct结构体中,个成员的作用,在钩子里,他们分别起什么作用,怎么用。
问题二: public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
public delegate int HookProc(int nCode, int wParam, IntPtr lParam); private int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam)
{
//这个被委托的方法里,各参数分别是怎么用。
//我记得参数一:好像是消息代号的。分别鼠标,按键,或是其它,等等的。
//我记得参数二:好像是在参数一的基础上,为不同作用的。
//参数三:不了解,我希望有高人帮我详细说一下,谢谢。
return ........;
}API:SetWindwosHookEx中,
参数一int idHook:按字面意思是:“钩子编号”的意思吗?有什么用,一般怎么用。虽然是为了钩子之间的区别,但没怎么见到用过。
参数二HookProc lpfn:个是委托,就如HookCallbackProcedure方法中的参数一样.各参数说明一下怎么用。他返回0,或1,会有什么影响。我记得返回1就是截断消息了。不知道是否正解,指点一下。
参数三IntPtr hInstance:是钩子的句柄吗?怎么用。
参数三int threadId:好像是钩子作用范围的一个标识,我只知道,配合参数三,参数四为0,可以为全局钩子。就看参数三。但还是没了解透。
问题一: public struct KeyBoardDllHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}如KeyBoardDllHookStruct结构体中,个成员的作用,在钩子里,他们分别起什么作用,怎么用。
问题二: public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
public delegate int HookProc(int nCode, int wParam, IntPtr lParam); private int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam)
{
//这个被委托的方法里,各参数分别是怎么用。
//我记得参数一:好像是消息代号的。分别鼠标,按键,或是其它,等等的。
//我记得参数二:好像是在参数一的基础上,为不同作用的。
//参数三:不了解,我希望有高人帮我详细说一下,谢谢。
return ........;
}API:SetWindwosHookEx中,
参数一int idHook:按字面意思是:“钩子编号”的意思吗?有什么用,一般怎么用。虽然是为了钩子之间的区别,但没怎么见到用过。
参数二HookProc lpfn:个是委托,就如HookCallbackProcedure方法中的参数一样.各参数说明一下怎么用。他返回0,或1,会有什么影响。我记得返回1就是截断消息了。不知道是否正解,指点一下。
参数三IntPtr hInstance:是钩子的句柄吗?怎么用。
参数三int threadId:好像是钩子作用范围的一个标识,我只知道,配合参数三,参数四为0,可以为全局钩子。就看参数三。但还是没了解透。
键盘钩子说明:
wParam用于发送虚拟键盘码,如VK_F12代表F12
lParam用于保存与虚拟键盘码有关的辅助信息,例如你一直按着a键,lParam会记录你a按下的次数,而不会重复发送a的按键信息,当然a还会记录你按下多个键时候的第二功能键ALt3.如果要截断消息,直接返回true,如果不想截断消息用
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
这样他就会继续交给下一个钩子过程,因为系统会有许多钩子过程处理这些消息,我们所安装的钩子只是钩子链上面的一个门卡。4.参数IntPtr hInstance和 int threadId之间有密切关系,如果要安装本程序的钩子过程,hInstance必须是NULL,threadId必须是当前进程的线程id,即GetCurrentThreadId()
如果要安装全局钩子,则钩子过程必须写到dll中,并且hInstance必须是GetModuleHandle("Hook"),threadId必须是0