一个全局钩子dll,但只能接收调用它的程序窗口的消息解决方法

一个全局钩子dll,但只能接收调用它的程序窗口的消息
如题,想获得得鼠标在任意窗口的坐标,写了一个全局的钩子dll,用来响应鼠标移动消息,并把当前坐标用传给主窗口
代码如下:
mouseHook.h文件代码:
__declspec(dllexport)BOOL StartHook(HWND hcaller);
__declspec(dllexport)BOOL EndHook();

mouseHook.cpp文件代码:

#include "stdafx.h"
#include "mouseHook.h"

HINSTANCE hInstance=NULL;
HWND hWndCaller=NULL;
HHOOK hhook=NULL;
#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
  DWORD ul_reason_for_call,
  LPVOID lpReserved
)
{
hInstance=(HINSTANCE)hModule;
  return TRUE;
}
LRESULT CALLBACK MouseHookProc(UINT nCode, WPARAM wParam, LPARAM lParam)

{

if(wParam == WM_MOUSEMOVE) //只处理WM_MOUSEMOVE消息

{

MOUSEHOOKSTRUCT *mhookstruct; //鼠标HOOK结构体
mhookstruct = (MOUSEHOOKSTRUCT*)lParam;
POINT pt = mhookstruct->pt;
PostMessage(hWndCaller,WM_MOUSEMOVE,MK_CONTROL,MAKELPARAM(pt.x,pt.y));

}
return CallNextHookEx(hhook,nCode,wParam,lParam);

}

BOOL StartHook(HWND HWNDCALLER)
{
hWndCaller=HWNDCALLER;
if(!(hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInstance,0)))//
  return FALSE;
  return TRUE;
}
BOOL EndHook()
{
  return UnhookWindowsHookEx(hhook);
}
#ifdef _MANAGED
#pragma managed(pop)
#endif


------解决方案--------------------
把这一段中变量设置为共享数据
#pragma data_seg ("shareddata") 
HINSTANCE hInstance=NULL;
HWND hWndCaller=NULL;
HHOOK hhook=NULL;
#pragma data_seg()
------解决方案--------------------
使用WH_MOUSE_LL,不需要用dll
------解决方案--------------------
只需共享hWndCaller