首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#键盘钩子有关问题

2014-01-03 
c#键盘钩子问题int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam){if (nCode 0 && wParam (

c#键盘钩子问题
      int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)0x100)
            {
                int vkCode = Marshal.ReadInt32(lParam);

                if (vkCode == (int)Keys.Q) { press((byte)Keys.NumPad7);return 1; } 
            }

            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }

为什么  if (vkCode == (int)Keys.Q) { press((byte)Keys.NumPad7);} return 1; 这句把return 1放外面就什么也打不出来了?而放里面就可以打出7屏蔽Q,为何?
[解决办法]
放在外面
press((byte)Keys.NumPad7)就无效了
因为它会触发另一次KbHookProc,并且return 1而不再执行CallNextHookEx(hHook, nCode, wParam, lParam);
只有执行了CallNextHookEx(hHook, nCode, wParam, lParam);才会处理后续的钩子。
[解决办法]
return CallNextHookEx(hHook, nCode, wParam, lParam);这句话是关键,意思是当你处理外后,按键消息继续传递给系统,系统继续处理。就是正常的按键。

如果return 1 放外面,这句话就执行不到了,那就是说你的所有按键消息系统都接收不到了。
[解决办法]
放到外面就不会执行return CallNextHookEx(hHook, nCode, wParam, lParam);了
[解决办法]
放在外面 不就直接return 1 了么 就不执行return CallNextHookEx(hHook, nCode, wParam, lParam);了
。。打个断点 就明白。

热点排行