我想直接在主程序中处理数据,这样更简单,所以我只需要用钩子钩到消息后通知主程序一声,请问如何实现?用findwindow吗?  我不知道mfc创建的项目classname和windowname分别是什么.

解决方案 »

  1.   

    你在设定钩子的时候把当前窗口的句柄传递给一个全局变量(在钩子中设定),然后在‘钩’到消息后用SendMessage(...)发给主窗口。我有写过这样的程序,用的就是这种方法。
      

  2.   

    最好通过内存映射(mapfile)将主窗口的Handle共享出来。同时你不能在Dll中再次发送同样的消息,因为那样会造成消息循环,你发送与钩子相同的信息回被再次Hook到。你必须RegisterMessage,在Dll中发送注册过的消息,在主程序中处理相应的消息。当然好像VC可以直接使用Shareable的内存段,如果行的话也不一定要使用内存映射来在主程序和Dll中共享数据。
      

  3.   

    #pragma data_seg(".SHARDAT")
    HWND hwnd=NULL;
    #pragma data_seg()
    //you can use pragma macro
      

  4.   

    请问kingzai() :我想
    #pragma data_seg(".SHARDAT")
    HWND hwnd=NULL;
    #pragma data_seg()
    一定是在dll中声明,但请问,如何在exe中使用?
      

  5.   

    you can declare function in dll,and call it in Exe,such as
     
    BOOL installHook(HWND hwnd)//define this function in dll

        ...
    }
    //and call it in Exe
    installHook(this->m_hWnd);
    .....
    for more details,i think you can find some examples in codeguru
      

  6.   

    我是这样做的:把
    #pragma data_seg(".SHARDAT")
    HWND hwnd=NULL;
    #pragma data_seg()
    在dll头文件中声明,然后在exe中include ,现在是能用了,不会报错,但我在dll中改变值之后,在exe中仍然没有反应,请问这是为什么?
      

  7.   

    you can consult this example:
    http://www.codeproject.com/dll/pwdspy.asp