mfc用hook来截获我们所感兴趣的消息。。。
SetWindowsHookEx函数用来设置一个hook,函数如下
HHOOK SetWindowsHookEx(
int idHook,
HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId );
idHook用来表示我们希望截获的消息类型 lpfn: 指向一个hook过程,如果dwThreadId 参数是0或者是其他线程的一个标识,lpfn参数必须指向一个动态链接库。否则的话,lpfn指向一段代码,hook过程指向本线程。 hMod: 一个指向了动态链接库(包含hook过程,指向lpfn函数的),hmod参数必须设置为空如果dwThreadId 参数是指向本线程的dwThreadId:标识了hook过程属于的线程id,当设置为0时,代表所有的线程都拥有该hook过程。
下面我们创建一个屏蔽当前线程的hook过程、、
创建一个对话框应用程序,在OnInitDialog()函数中写入SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
然后声明全局函数MouseProc。写入LRESULT CALLBACK MouseProc( int nCode,
WPARAM wParam,
LPARAM lParam
)
{
return 1;
}
我们也可以屏蔽键盘消息m_hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc ,NULL,GetCurrentThreadId());
LRESULT CALLBACK KeyboardProc( int code,
WPARAM wParam,
LPARAM lParam
)
{
if(wParam==VK_SPACE||wParam==VK_RETURN)
return 1;
else
return CallNextHookEx(m_hook,code,wParam,lParam);
}
表示当我们按下的是空格键或者回车键时,将会被屏蔽。