应该是监控Winodws系统的Paint,这些Hook好象不行

解决方案 »

  1.   

    用WH_GETMESSAGE,监控Winodws系统的Paint消息,得到相应的窗口句柄。
      

  2.   

    lts:
      能否详细一点
      

  3.   

    我目前了解的HOOK消息有如下一下:
    WH_CALLWNDPROC
    WH_CALLWNDPROCRET
    WH_CBT
    WH_DEBUG
    WH_FOREGROUNDIDLE
    WH_GETMESSAGE
    WH_JOURNALPLAYBACK
    WH_JOURNALRECORD
    WH_KEYBOARD
    WH_KEYBOARD_LL
    WH_MOUSE
    WH_MOUSE_LL
    WH_MSGFILTER
    WH_SHELL
    WH_SYSMSGFILTER
    对于你所提到的用哪一个合适,我认为基本的要有:WH_CALLWNDPROC、WH_MOUSE、WH_KEYBOARD、WH_KEYBOARD_LL、WH_MOUSE_LL以及WH_SHELL。至于结构你可以在本机建立:
    HHOOK SetWindowsHookEx(
      int idHook,
      HOOKPROC lpfn, 
      HINSTANCE hMod,
      DWORD dwThreadId
    );
    相信这样回答多少能给你一点帮助,如果还需要别的,请EMAIL:[email protected]
      

  4.   

    编写一个getmsg的dll,然后使用SetWindowsHookEx将该dll中的getmsg的例程挂接入系统所有的进程中,使用的方法:
    SetWindowsHookEx(WH_GETMESSAGE,your_prov,ModuleFromAddress(your_prov),0);
    关于
    HMODULE ModuleFromAddress(PVIOD pv)
    {
     MEMORY_BASIC_INFORMATION mbi;
       return((VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) 
          ? (HMODULE) mbi.AllocationBase : NULL);
    }
    0表明全局的注入。在你的getmsg中,你可以做拦截或者处理,
    LRESULT WINAPI GetMsg(int code, WPARAM wParam, LPARAM lParam) 
    {
       ...//你的处理 
     return(CallNextHookEx(g_hhook, code, wParam, lParam));//发给原来的程序
    }