先请看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!
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!
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!
DispValue=234;
行吗?
MyData READ WRITE SHARED
声明以读写方式共享,否则你在这个线程里做的修改不会影响其他引用线程。
开始就是就是你说的那样,结果不行,才把DispValue=234提前.To ForTopLevel:
我也考虑到应该是进程间数据共享的问题,但这方面还不太熟练,能否指点一二.
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); //撤销钩子}
2.你所声明的段只起到了修饰作用,只有使用
#pragma comment(linker,"/SECTION:MyData,rws")
后才能被共享
试了,还是不行,MessageBox框显示的DispValue值还是0.