关于钩子,高手请进.
WuOu 2005-07-12 09:02:05 先请看DLL的一个实现文件.cpp中的设置全局钩子的代码:
#pragma data_seg("MyData")
HHOOK hhook=NULL; //钩子句柄
HINSTANCE pInstance=NULL; //钩子模块句柄
UINT DispValue=0; //记录鼠标单击次数的变量
#pragma data_seg()
static LRESULT WINAPI SetHook_proc(int nCode,WPARAM wParam,LPARAM lParam)
{
LRESULT lResult=CallNextHookEx(hhook,nCode,wParam,lParam);
if(HC_ACTION==nCode)
{
HARDWAREHOOKSTRUCT *pHardWareHook=(HARDWAREHOOKSTRUCT*)lParam;
if(MM_MIXM_CONTROL_CHANGE==pHardWareHook->message)
{
CString strMsg;
strMsg.Format("DispValue=%d!",DispValue);
MessageBox(NULL,strMsg,"mouse_proc",MB_OK);
}
}
return (lResult);
}
extern "C" _declspec(dllexport) void SetHook()
{
DispValue=234;
hhook=SetWindowsHookEx(WH_GETMESSAGE,SetHook_proc,pInstance,0);
}
extern "C" _declspec(dllexport) void UnSetHook()
{
UnhookWindowsHookEx(hhook); //撤销钩子
}
问题是:DispValue的值我分明在SetHook函数中设置为234,可是在钩子响应过程SetHook_proc中DispValue却始终都是0,我用MessageBox显示消息,输出它的值,始终是0!