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希望高手指点,菜鸟感激不尽!!!!!!!!

解决方案 »

  1.   

    SetWindowsHookEx的后两个参数不能全为0。
      

  2.   

    恩,我知道第三个参数要用当前程序的句柄,但是我用HANDLE hInstance=AfxGetInstanceHandle();后
    这样设置g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,(HINSTANCE)hInstance ,0);出现同样的问题unused   cxx0030:error   :expressstion   cannot   be   evaluated 
    希望高手指点下.
      

  3.   

    看一下SDK吧,上面说的很清楚。
      

  4.   

    我看过那帮助文档了,我都按他要求做的,可那返回值还是NULL
      

  5.   

    Hook当前线程还是所有线程还是所有进程?
      

  6.   

    不是已经跟你说了吗,“SetWindowsHookEx的后两个参数不能全为0”,这是“g_hLogHook一直收不到返回值”的原因。
    如果要Hook所有进程,Hook函数必须在一个DLL里面,SetWindowsHookEx的第3参数要给DLL的HMODULE,就是DllMain的第1参数;SetWindowsHookEx的第4参数要给0。
      

  7.   

    恩,大概明白了.全局钩子要放在DLL里.我后来也是这样做的.
    有时候没人指点真的要被这些问题郁闷死.
    结贴了.特别鸣谢cnzdgs.