Hook编程,我做了个程序,这个程序调用了另外一个exe程序,我想在程序中能够监视exe程序。
   当那个exe程序点击了一个“完成”的Button按钮的时候,我的Hook程序就把exe这个进程给结束掉。   问题:
   1,我应该做一个什么样的Hook程序能,局部的还是全局的,还是两种都可以。
   2,SetWindowsHookEx(,(HOOKPROC)Proc,,g_dw);
      第一个参数是什么?
      第三个参数怎么获得
   3  Proc函数应该怎样写啊   谢谢高手指点
   

解决方案 »

  1.   

    正好我也在调试这个东西,给你参考参考1.局部的全局的都可以,最好用局部的,这样系统消耗小些
    2.函数SetWindowsHookEx安装钩子。其函数原型为: 
    HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 
    参数idHook表示钩子类型,它是和钩子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等。 
    Lpfn是钩子函数的地址。 
    HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 
    dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 
    SetWindowsHookEx返回所安装的钩子句柄。  PROCESS_INFORMATION pi;
        STARTUPINFO si;
        si.cb = sizeof(STARTUPINFO);
        si.lpReserved = NULL;
        si.lpDesktop = NULL;
        si.lpTitle = NULL;
        si.dwFlags = 0;
        si.cbReserved2 = 0;
        si.lpReserved2 = NULL;
        BOOL bres = CreateProcess(
    NULL
    ,_T("C:\\padspwr\\PowerPCB\\powerpcb.exe")
    ,NULL
    ,NULL
    ,false
    ,NORMAL_PRIORITY_CLASS
    ,NULL
    ,NULL
    ,&si
    ,&pi);

    glhHook=(HWND)SetWindowsHookEx(WH_KEYBOARD,HookProc,NULL,pi.dwThreadId);
    //pi.dwThreadId即为第三个参数,不过这样调用好象有点问题,还没有找到原因
    3.LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
    {......}