需要拦截目标程序的显示和关闭窗口消息。照搬网上的代码。显示注入DLL成功。但是回调函数并没有执行。请教
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
HHOOK hooker;
HWND notepadhandle;
BOOL handled;
extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam);
char* ConvertInttoChar(int i);
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH)
{
handled=FALSE;
notepadhandle=FindWindow(TEXT("Notepad"),NULL);
if(notepadhandle==NULL)
{
printf("Notepad Not Found.\n");
return TRUE;
}
hooker=SetWindowsHookEx(WH_GETMESSAGE,HookProc,(HINSTANCE)hModule,GetWindowThreadProcessId(notepadhandle,NULL));
if(hooker)
{
OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,(DWORD)notepadhandle);
printf("hookpro:%d\n",HookProc);
printf("hmodule:%d\n",hModule);
printf("pid:%d\n",notepadhandle);
printf("Hook Successfully.\nHookID:%d\n",hooker);
}
else
{
printf("Hook Failed.\nError:%d\n",GetLastError());
return TRUE;
}
//PostMessage(notepadhandle,WM_CLOSE,0,0);
//printf("发送关闭指令");
}
if(ul_reason_for_call==DLL_PROCESS_DETACH)
{
UnhookWindowsHookEx(hooker);
return TRUE;
}
return TRUE;
}
extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
printf("NCOD111");
if(nCode<0)
{
printf("NCOD<0");
return CallNextHookEx(hooker,nCode,wParam,lParam);
}
tagMSG* msg;
msg=(tagMSG*)lParam;
if(nCode==HC_ACTION && (msg->message==WM_CLOSE))
{
if(handled==FALSE)
printf("拦截到消息:%d\n",msg->message);
handled=TRUE;
UnhookWindowsHookEx(hooker);
msg->message=WM_NULL;
return CallNextHookEx(hooker,nCode,wParam,(LPARAM)msg);
}
printf("LAST");
return CallNextHookEx(hooker,nCode,wParam,lParam);
}
执行的结果,DLLmain的代码能正常执行,并显示注入成功;但是回调函数中的打印代码均没执行,请教。
执行结果
hookpro:1666846815
hmodule:1666777088
pid:4063406
Hook Successfully.
HookID:17567643