反复启用停止钩子出错!解决思路

反复启用停止钩子出错!
挂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

我收集来的,呵呵~