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);了
。。打个断点 就明白。