g_hHook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,(HINSTANCE)g_ModHandle, GetCurrentProcessId());上面的语句怎么老是通不过??(编译没问题,使用g_hHook=NULL)第三个参数为NULL也不行

解决方案 »

  1.   

    我的g_hHook再DLL中是全局变量,是不是在我的DLL挂到目标进程时DLL会丢掉数据?应该不会吧!!不是全部映射到目标进程吗?
      

  2.   

    Expression Evaluator Error CXX0030
    expression not evaluatable
    The debugger’s expression evaluator could not obtain a value for the expression as written. One likely cause is that the expression refers to memory that is outside the program’s address space (dereferencing a null pointer is one example). Windows NT and Windows 95 do not allow access to memory that is outside of the program’s address space.You may want to rewrite your expression using parentheses to control the order of evaluation
      

  3.   

    第三个参数用于指明包含KeyboardProc函数的DLL,注意KeyboardProc函数的地址在你的进程地址空间里;第四个参数应该传递的是你想要HOOK的线程的ID用GetCurrentProcessId()应该是不对的;DLL中全局变量一般来说是不会丢失的
    建议你还是查看你程序的上下文关系,确定你SetWindowsHookEx参数的正确性
      

  4.   

    HOOKPROC)KeyboardProc 得 过程 可能没有 写
      

  5.   

    也许是以下原因:
    1、如果你想用Hook到全部系统进程中,则最后一个参数为0;
    2、SetWindowsHookEx函数返回的g_hHook应为全局共享类型,最发好在dll中定义共享段或都设置为static变量类型。
      

  6.   

    g_hHook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0, ::GetCurrentThreadId()); //本进程