挂个WH_GETMESSAGE钩子,全局的时候没问题,如果挂在某个线程上就出错
GetLastError返回参数错误的信息.代码如下:帮帮忙!谢谢!#pragma data_seg("MsgDllShared")
static TARGET_TYPE gMsgTarget = 0;
static HHOOK ghMsgHook = NULL;
static HINSTANCE ghInstance = NULL;
#pragma data_seg()
#pragma comment(linker,"/section:MsgDllShared,rws")
BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
ghInstance = (HINSTANCE)hModule;
}
return TRUE;
}LRESULT /*WINAPI*/ CALLBACK MsgHookProc(int nCode,WPARAM wparam,LPARAM lparam) 
{
if(nCode == HC_ACTION)
{
PMSG pcs = (PMSG)lparam;
if(pcs && pcs->hwnd != NULL)
{
if(pcs->message == WM_COMMAND)
{
   POSTMESSAGE(gMsgTarget,KHM_MSG_COMMAND,(WPARAM)pcs->hwnd,pcs->wParam);
  }
} }
return CallNextHookEx(ghMsgHook,nCode,wparam,lparam); //继续传递消息
}BOOL __stdcall SetMsgHook(BOOL bInstall, TARGET_TYPE MsgTarget, DWORD dwThreadId)
{
if(bInstall && ghMsgHook)
return TRUE; if(!bInstall && !ghMsgHook)
return TRUE; if(bInstall)
{
if(MsgTarget == 0)
return FALSE;
ghMsgHook = SetWindowsHookEx(WH_GETMESSAGE,MsgHookProc,ghInstance,dwThreadId); 
DWORD dw = GetLastError();
if(ghMsgHook != NULL)
{
gMsgTarget = MsgTarget;
return TRUE;
}
}
else
{
if(UnhookWindowsHookEx(ghMsgHook))
{
gMsgTarget = 0;
ghMsgHook = NULL;
return TRUE;
}
}
return FALSE;
}