c#钩住键盘没有的地方';行不通
我试图理解.NET中的windows钩子。我要听按键(全局)。我理解SetWindowsHooks的第一个和第二个参数的含义。第一个参数指定钩子的类型,例如WHU键盘的2,第二个参数指定回调处理程序的类型,例如,如果事件发生,应该调用哪个函数c#钩住键盘没有的地方';行不通,c#,delegates,hook,C#,Delegates,Hook,我试图理解.NET中的windows钩子。我要听按键(全局)。我理解SetWindowsHooks的第一个和第二个参数的含义。第一个参数指定钩子的类型,例如WHU键盘的2,第二个参数指定回调处理程序的类型,例如,如果事件发生,应该调用哪个函数 hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0); 如果我将最后一个参数设置为0,我可以截获系统中所有线程的事件 hookID = SetWindowsHook
hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0);
如果我将最后一个参数设置为0,我可以截获系统中所有线程的事件
hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0);
但是为什么(以及如何)我必须指定第三个参数?我尝试以以下形式在控制台应用程序中挂接WH_键盘(类型2):
hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0);
它不起作用。因为IntPtr.Zero在此上下文中无效。有人能解释一下第三个参数的含义吗?我如何指定一个有效的参数,以便我的控制台应用程序能够对(全局)WHU键盘事件做出反应
hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0);
提前感谢这不是可以在C代码中使用的钩子类型,它需要DLL注入。改用键盘。需要一个控制台模式应用程序没有的消息循环,很多库都提供了一个。只需在Nuget中搜索“键盘钩子”。那么我什么时候应该使用WH_键盘呢?如果我想在@HansPassant上使用它,那么为什么以及如何指定hInstance(第三个参数),谢谢你的回答。如果我在控制台应用程序中调用“Application.Run()”,则会调用钩子过程。为什么Application.Run()会创建消息循环?为什么这样的循环不能从“纯”控制台应用程序调用?
hookID = SetWindowsHookEx((int) WH_TYPE.WH_KEYBOARD, hp,IntPtr.Zero, 0);