读书人

为什么小弟我的SetWindowsHookEx总是返

发布时间: 2012-01-15 22:57:48 作者: rapoo

为什么我的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要用动态库的句柄,不能够为空的好像。

读书人网 >VC/MFC

热点推荐