C++如何禁用全局键盘钩子或者程序钩子?

今天给大家分享一下c++键盘钩子的知识,同时也讲解一下键盘钩子c# 。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始!
如何使用键盘挂钩
I:设置挂钩
设置钩子是通过()的API函数 。
原型:hhook (int id hook,lpfn,,dword )
:装载挂钩的类型 。
Lpfn:钩子进程的入口地址 。
HMod:应用程序的事件处理器 。
装载挂钩的螺纹ID 。
参数:
:
该参数可以是下列值:
、、WH_C *** 、、、、、、、、、、、、WH_SY ***。
我不想一一解释这些参数,因为它们在MSDN有详细的解释 。我只选择其中的几个用中文解释 。
WH _键盘:一旦有敲击键盘的消息(键盘被按下,键盘弹出),会调用你的钩子函数,然后把这个消息放入应用程序的消息队列中 。钩子函数可以改变和丢弃击键消息 。
WH _鼠标:在每个鼠标消息被放入应用程序的消息队列之前,会调用你的钩子函数 。钩子函数可以改变和丢弃鼠标消息 。
:每次你的应用程序调用()或()从应用程序的消息队列中请求消息时,都会调用你的钩子函数 。钩子函数可以改变并丢弃这个消息 。
二:松开挂钩 。
钩子的释放使用()函数 。
原型:(h hook HHK)
钩子函数释放钩子链中函数加载的钩子进程 。
Hhk:要释放的钩子进程的句柄 。
三:挂钩过程
钩子子程使用函数 。实际上,只是应用程序定义的一个符号 。比如你可以写 。但是参数是一样的 。Win32 API提供的函数有:、、、C *** Proc、、、等 。关于他们的详细解释,请参考MSDN 。我只是解释一下在这里的意思 。
原型:回调键盘钩子(int ncode,,)
说明:钩子进程是一个附加在钩子上的函数,所以钩子进程只被调用,不被应用程序调用,所以有时候需要作为回调函数使用 。
参数描述:
NCode:钩子代码,钩子进程用它来决定是否执行 。钩子代码的值取决于钩子的种类 。每种挂钩类型都有自己的一套特征代码 。比如对于WH _键盘,钩子代码的参数是:,。的含义:参数和包含击键消息的信息,的含义:参数和包含击键消息的信息,击键消息从不从消息队列中删除 。(应用程序调用函数并设置标志) 。也就是说,当nCode等于时,钩子子程必须处理消息 。当它是时,钩子子程必须将消息传递给函数而不做进一步的处理,并且必须有函数的返回值 。
:键盘敲击产生的键盘消息,键盘按键的虚拟代码 。
:包含消息的细节 。
注意:如果钩子进程中的nCode小于零,钩子进程必须返回 (ncode,,);钩子子程中的nCode大于零,但是钩子子程不处理消息 。作者建议你调用,返回这个函数的返回值 。否则,如果另一个应用程序也装载了WH键盘钩子,钩子将不接受钩子通知并返回一个不正确的值 。如果钩子进程处理一个消息,它可能会返回一个非零值,以防止系统将消息传递给其他剩余的钩子或进程 。所以更好在钩子子程的最后返回的返回值 。
IV:调用下一个钩子函数
调用下一个钩子函数时使用函数 。
原型:(hhook hhk,int ncode,,)
函数的作用是:将钩子信息传递给当前钩子链中的下一个钩子子程 。钩子子程可以在钩子信息被处理之前或之后调用这个函数 。为什么要使用这个功能已经在hook iii过程中的"注意事项"中详细解释过了 。
Hhk:当前钩子的句柄
NCode:传递给挂钩进程的挂钩代码 。
:传递给挂钩进程的值 。
:传递给挂钩进程的值 。
参数:
当前钩子的句柄 。应用程序接受这个句柄作为先前调用函数的结果 。
NCode:传递给钩子进程的钩子代码,下一个钩子进程用它来决定如何处理钩子信息 。