源代码:
#define DLLEXPORT __declspec(dllexport)#pragma data_seg("mydata")
 HHOOK GW_MouseHook = NULL;          // Mouse Hook Handle 
 HINSTANCE GW_Instance = NULL;       // DLL Instance
#pragma data_seg()HWND pWnd = NULL;static AFX_EXTENSION_MODULE GWEngineDLL = { NULL, NULL };extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
  UNREFERENCED_PARAMETER(lpReserved);  if (dwReason == DLL_PROCESS_ATTACH)
  {
    TRACE0("GWENGINE.DLL Initializing!\n");

    if (!AfxInitExtensionModule(GWEngineDLL, hInstance))
      return 0;    new CDynLinkLibrary(GWEngineDLL);
    GW_Instance = hInstance;
  }
  else if (dwReason == DLL_PROCESS_DETACH)
  {
    TRACE0("GWENGINE.DLL Terminating!\n");
    AfxTermExtensionModule(GWEngineDLL);
  }
  return 1;
}//---------------------- Mouse Hook Callback funtion ---------------------------//钩子函数的实现: 
LRESULT CALLBACK MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
{
  SendMessage(pWnd,WM_USER + 101,0,0);
  return CallNextHookEx(GW_MouseHook,nCode,wparam,lparam);
}//--------------------------- Export function ---------------------
//Install MouseHook
DLLEXPORT BOOL WINAPI EnableGW(HWND hWnd)
{
  if(GW_MouseHook == NULL)
  {
    GW_MouseHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,GW_Instance,0);    if(GW_MouseHook == NULL)
      return FALSE;    pWnd = hWnd;
  }
  return TRUE; 
}//Uninstall MouseHook
DLLEXPORT BOOL WINAPI DisableGW() 
{
  if(GW_MouseHook != NULL)
  {
    if(!UnhookWindowsHookEx(GW_MouseHook))
      return FALSE;
    GW_MouseHook = NULL;
  }
  return TRUE;
}请大家看上面的源代码,目的是创建一个全局鼠标钩子,编译完后,调用EnableGW()后,用SPY看他的消息,发现当鼠标在调用者的窗口区域里,是起作用了,会收到WM_USER + 101,可是当鼠标移出调用者的窗口区域后,这个所谓的全局鼠标钩子一点都钩不上了,接收不到任何消息??请问为什么??难道我上面的代码有错吗??十万感激