反复启用停止钩子出错!解决思路
反复启用停止钩子出错!
挂WH_MOUSE全局钩子,反复SetWindowsHookEx和UnHookWindowsHookEx,发现SetWindowsHookEx返回值为0,不能正确挂钩,请教高手原因!
BOOL StartClipboardHook()
{
if(g_hook==NULL)
{
OtherFunction();
g_hook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,glhInstance,0);
if(g_hook!=NULL)
return TRUE;
}
return FALSE;
}
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode==HC_ACTION)
{
if(wParam == WM_MOUSEMOVE)
{
MOUSEHOOKSTRUCT *pMsHkSt=(MOUSEHOOKSTRUCT*)lParam;//中间略去若干代码
}
}
LRESULT RetVal = CallNextHookEx( g_hook, nCode, wParam, lParam );
return RetVal;
}
BOOL StopClipboardHook()
{
BOOL bResult= UnhookWindowsHookEx(g_hook);
if(bResult)
{
g_=NULL;
OtherFunc();
}
return TRUE;
}
------解决方案--------------------
试试我这个程序会不会反复之后挂掉:
http://waxb.blog.com.cn/archives/2007/MsgHook.shtml
我收集来的,呵呵~
挂WH_MOUSE全局钩子,反复SetWindowsHookEx和UnHookWindowsHookEx,发现SetWindowsHookEx返回值为0,不能正确挂钩,请教高手原因!
BOOL StartClipboardHook()
{
if(g_hook==NULL)
{
OtherFunction();
g_hook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,glhInstance,0);
if(g_hook!=NULL)
return TRUE;
}
return FALSE;
}
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode==HC_ACTION)
{
if(wParam == WM_MOUSEMOVE)
{
MOUSEHOOKSTRUCT *pMsHkSt=(MOUSEHOOKSTRUCT*)lParam;//中间略去若干代码
}
}
LRESULT RetVal = CallNextHookEx( g_hook, nCode, wParam, lParam );
return RetVal;
}
BOOL StopClipboardHook()
{
BOOL bResult= UnhookWindowsHookEx(g_hook);
if(bResult)
{
g_=NULL;
OtherFunc();
}
return TRUE;
}
------解决方案--------------------
试试我这个程序会不会反复之后挂掉:
http://waxb.blog.com.cn/archives/2007/MsgHook.shtml
我收集来的,呵呵~