替换消息处理函数.
api
LONG SetWindowLong(          HWND hWnd,
    int nIndex,
    LONG dwNewLong
);

解决方案 »

  1.   

    使用C\C++等非托管语言,写个全局拦截全局消息的hook,使用dll封装起来,然后,你的C#程序进行平台调用!
    因为你还要钩到汉字,那么要钩到WM_UNICHAR消息。
    C++\C代码和思路:
    1、设定共享数据段的变量:
    #pragma data_seg("mysec")
    HHOOK myhook=NULL;  //全局钩子定义
    HWND tHwnd=NULL;    //目标窗口的句柄
    HINSTANCE hMod=NULL;  //dll模块句柄
    #pragma data_seg()  
    //在def文件中设定此段为 read write shared
    2、在dllmain中把模块句柄传到hMod
    3、设定一个C#调用的函数setgHook(dword) //参数为目标线程的id
    4、WM_CHAR事件一般钩子为WH_GETMESSAGE
    钩子函数一般为:
    LRESULT CALLBACK myprocAG(int code, WPARAM wParam, LPARAM lParam)
     {
    if(code==HC_ACTION)
    {
    PMSG pmsg= (PMSG)lParam;
    if((pmsg->message==WM_CHAR||pmsg->message==WM_UNICHAR))
    {
                            somefun(); //添加你自己的功能,wParam即为字符的值,至于UNICODE使用的编码,因该是UTF32
    return 1;
    }
    return(CallNextHookEx(myhook,code,wParam,lParam));
    }
    else
    return(CallNextHookEx(myhook,code,wParam,lParam));
    }
    5、在C#里边调用即可!
    以上为简要思路,具体还要多看MSDN
      

  2.   

    用VC做个DLL用SetWindowsHookEx比较方便。
      

  3.   


    ∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞力争成为中国最大的架构师群联盟,架构师技术交流群:28995710正式开放!!!已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
    google 、
    eBay、
    Youtube、
    淘宝等
    ......
    技术文章包括:
    《自己动手写操作系统》
    《搜索引擎-原理、技术与系统》
    《企业应用架构模式》
    ......
    重要的RUP实例
    设计模式精解
    ......
    资料陆续上传中
    ∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞∽∝∞