这个钩子为什么钩不住指定线程的消息呢?
这个钩子为什么钩不住指定线程的消息呢?
钩子为DLL~
RPStartMessageHook接收的是一个程序得线程ID~
如果我想只对用户自定义的消息做操作~在GetMessageProc里面怎么判断?
如果我想更改这个消息传递的数据可以吗?
DLL程序全文~~
// hook.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include <afxdllx.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma data_seg("PublicData")
HHOOK hhook=NULL;
HINSTANCE pInstance = NULL;
UINT Point=0;
#pragma data_seg()
#pragma comment(linker,"/section:PublicData,rws")
static AFX_EXTENSION_MODULE HookDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("HOOK.DLL Initializing!\n");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(HookDLL, hInstance))
return 0;
new CDynLinkLibrary(HookDLL);
pInstance = hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("HOOK.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(HookDLL);
}
return 1; // ok
}
LRESULT WINAPI CALLBACK GetMessageProc(int code,WPARAM wParam,LPARAM lParam)
{
CWPSTRUCT msg;
memcpy(&msg,(void *)lParam,sizeof(CWPSTRUCT));
return CallNextHookEx(hhook, code, wParam,lParam);
}
extern "C" _declspec(dllexport) BOOL WINAPI RPStartMessageHook(DWORD ThreadID)
{
hhook=SetWindowsHookEx(WH_GETMESSAGE,GetMessageProc,pInstance,ThreadID);
if(hhook!=NULL)
return TRUE;
else
return FALSE;
}
extern "C" _declspec(dllexport) BOOL WINAPI RPStopMessageHook()
{
if (hhook!=NULL)
return UnhookWindowsHookEx(hhook);
return true;
}
extern "C" _declspec(dllexport) int WINAPI RPGetMessageResult()
{
return Point;
}