SetWindowsHookEx 第三个参数为HINSTANCE,通过FindWindow找到指定窗口句柄后如何
得到该进程的HINSTANCE呢?

解决方案 »

  1.   

    这个参数应该是你调用SetWindowsHookEx的DLL的模块实例句柄,它可以经由DllMain入口的第一个参数得到。
    至于SetWindowsHookEx的第四个参数dwThreadId,才是你需要借由窗口句柄得到的窗口线程ID,你可以通过下面的代码获得:
    DWORD dwThreadID = GetWindowThreadProcessId(hwnd, NULL);
      

  2.   

    选择相应的消息钩子,比如WH_CALLWNDPROC(用来监视窗口过程)、WH_GETMESSAGE(用来监视消息队列的消息)、WH_KEYBOARD(键盘消息)、WH_MOUSE(鼠标消息)等等。
      

  3.   

    SetWindowsHookEx
    HHOOK SetWindowsHookEx(          int idHook,
        HOOKPROC lpfn,
        HINSTANCE hMod,
        DWORD dwThreadId
    );
    不是有个参数hMod么。
      

  4.   

    李马的方法好像不行,对于钩进程外的消息,传dwThreadId,好像不起作用。
      

  5.   

    dwThreadId传0可以得到全部消息
      

  6.   

    李马的方法已经可以实现了对特定进程的hook,进程外消息只要将hook以dll形式就可以钩进程外消息。但是好像没有一种钩子是可以监控所有消息的,而spy++却可以实现,msdn上面有spy++的源代码,本人水平有限看不懂啊。