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

希望高手指点,菜鸟感激不尽!!!!!!!!
...全文
353 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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。

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧