如题:我在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,可以为全局钩子。就看参数三。但还是没了解透。

解决方案 »

  1.   

    1.int idHook, // 钩子的类型,即它处理的消息类型,如果是安装键盘钩子,这里是WH_KEYBOARD宏,如果是安装鼠标钩子,这里是WH_MOUSE2.private int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam)
    键盘钩子说明:
    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