SetWindowsHookEx钩子函数的返回值

ouyanglonghui 2008-02-20 08:03:57
HHOOK g_hLogHook = NULL; //钩子变量
HWND g_hLastFocus = NULL;
HWND g_SelfHandle = NULL;

//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值


void CLogfileDlg::OnLog()
{
// TODO: Add your control notification handler code here
g_SelfHandle = m_hWnd ;
if (g_hLogHook==NULL)
//安装日志钩子
g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,NULL,0);

::SetTimer(m_hWnd,1,1000*120,NULL);
}

HOOKPROC JournalLogProc(int iCode,WPARAM wParam, LPARAM lParam)
{
if (iCode< 0)
return (HOOKPROC)CallNextHookEx(g_hLogHook,iCode,wParam,lParam);

else
{
..........
return (HOOKPROC)CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
}

为什么在debug的时候发现g_hLogHook一直收不到返回值,提示
unused cxx0030:error :expressstion cannot be evaluated

希望高手指点,菜鸟感激不尽!!!!!!!!
...全文
221 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ouyanglonghui 2008-02-21
恩,大概明白了.全局钩子要放在DLL里.我后来也是这样做的.
有时候没人指点真的要被这些问题郁闷死.
结贴了.特别鸣谢cnzdgs.
回复
cnzdgs 2008-02-21
不是已经跟你说了吗,“SetWindowsHookEx的后两个参数不能全为0”,这是“g_hLogHook一直收不到返回值”的原因。
如果要Hook所有进程,Hook函数必须在一个DLL里面,SetWindowsHookEx的第3参数要给DLL的HMODULE,就是DllMain的第1参数;SetWindowsHookEx的第4参数要给0。
回复
ouyanglonghui 2008-02-21
谢谢各位的回答,我已经用其他途径实现了相同功能!
不过,我还是想知道这个程序到底哪里出错了??!!!
今天晚上12点前来看多下,看下有没有高手知道.
然后就结贴!
回复
ouyanglonghui 2008-02-21
所有进程!
回复
cnzdgs 2008-02-21
Hook当前线程还是所有线程还是所有进程?
回复
ouyanglonghui 2008-02-21
我看过那帮助文档了,我都按他要求做的,可那返回值还是NULL
回复
大熊猫侯佩 2008-02-21
看一下SDK吧,上面说的很清楚。
回复
ouyanglonghui 2008-02-21
恩,我知道第三个参数要用当前程序的句柄,但是我用HANDLE hInstance=AfxGetInstanceHandle();后
这样设置g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,(HINSTANCE)hInstance ,0);出现同样的问题unused cxx0030:error :expressstion cannot be evaluated
希望高手指点下.
回复
cnzdgs 2008-02-20
SetWindowsHookEx的后两个参数不能全为0。
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2008-02-20 08:03
社区公告
暂无公告