为什么我的SetWindowsHookEx总是返回NULL
//.EXE
DWORD dwThreadId = GetWindowThreadProcessId(m_hWnd,NULL);//获得自身进程ID
InstallHook(TRUE,dwThreadId);
//.DLL
#pragma data_seg( "Shared ")
HMODULE hmodDll=NULL;
HHOOK hHook=NULL;
#pragma data_seg()
void __declspec(dllexport) WINAPI InstallHook(BOOL IsHook,DWORD dwThreadId)
{
hHook =NULL;
if(IsHook)
{
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hmodDll,dwThreadId);
DWORD dwErr = GetLastError();
//GetProcAddress(GetModuleHandle( "GDI32.dll "), "ExtTextOutA "):取得要钩的函数在所在dll中的地址
HookAllAPI(_T( "GDI32.dll "),GetProcAddress(GetModuleHandle(_T( "GDI32.dll ")), "TextOutW "),(PROC)&H_TextOutW,NULL);
HookAllAPI(_T( "GDI32.dll "),GetProcAddress(GetModuleHandle(_T( "GDI32.dll ")), "TextOutA "),(PROC)&H_TextOutA,NULL);
}
}
============================================
每次跟踪到这里,SetWindowsHookEx都返回的NULL(unused = CXX0030: 错误: 无法计算表达式的值)
dwErr 的值为0
[解决办法]
把这段代码 "hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hmodDll,dwThreadId); "的hmodDll换成DLL的HANDLE试一下,动态库里HOOK要用动态库的句柄,不能够为空的好像。