msdn里说键盘的钩子可以挂接成全局的呀!
上次鼠标钩子也是,为什么不能收到别的线程的键盘消息呢?

解决方案 »

  1.   

    全局钩子必须放在另外一个DLL中
      

  2.   

    我创建了一个程序:kbspy.exe
    还创建了一个kbhooklib.dll
    hook procedure就放在了kbhooklib.dll里了.不行为什么呢?
      

  3.   

    钩子函数是由系统调用的,和你的进程不在同一个地址空间,因此钩子里的全局变量在系统那个进程中并没有赋值,肯定都是NULL.
      

  4.   

    在DLL中加入全局数据段:
    #pragma data_seg("ShareData")
    HWND hWnd=NULL;//你KBSPY的窗口句柄,等等
    HHOOK hhk=NULL;//还要注意,这里的数据必须初始化
    #pragma data_seg()
    然后按ALT+F7
    分别在DEBUG和RELEASE的LINK的最下面加上
    /SECTION:ShareData,rws
    就可一了。
    顺便提一句,我也写了个类似的东东有兴趣我寄给你
      

  5.   

    how to give you points?
      

  6.   

    KBHOOKLIB_API BOOL InjectCode(HWND hWnd)
    {
    g_hWnd = hWnd; 
    //Hook up all processes if dwThreadID is assigned to zero
    if(g_hHook = ::SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hModDll, 0))
    return TRUE;
    else
    return FALSE;
    }
    g_hWnd = hWnd; <---------对g_hWnd变量进行内存共享。方法
    1、CreateFileMapping();
    2、MapViewOfFile();
    3、UnmapViewOfFile();
    4、UnmapViewOfFile();
      

  7.   

    在dll中添上一个共享数据段,我觉得是最好的方法