是这样的,我想HOOK 一个程序的FindWindow函数,可是这个函数是在,那个程序的界面还没有出现的时候就执行的!
也就是说,如果程序运行起来了,我现在HOOK 就没有意义了!
可是如果那个程序还没有运行,也没法去HOOK,所以我想,可不可以,让这个程序刚一启动时就让他挂起暂停,这们我好有时间去HOOK 他的FindoWindow函数!!
有不有办法 呢?

解决方案 »

  1.   

    你可以先hook CreateProcess函数。
    在自己的CreateProcess函数中判断当前是不是要产生你想要的进程,
    然后给真正的CreateProcesss函数传CREATE_SUSPENDED参数,
    等你hook完FindWindow后,在resume起来。
      

  2.   

    CreateProcess的dwCreationFlags参数给CREATE_SUSPENDED,进程创建后就是暂停的。
      

  3.   

    没搞明白你的意思,难道你的hook就执行一次吗?可以放在一个线程里循环反复捕捉FindWindow呀。
      

  4.   

    不行,上面的所有方法都不行,因为,在创建进程时,把子进程是挂起了!
    但是我的往里注入DLL呀,暂停的线程是没法注入的!
    用是说,SetWindowHookEx没法用在.,暂时的线程上的!
      

  5.   

    至于3楼的朋友说的, 我的HOOK确实是只执行一次,不过,你说的放到一个线程里反复HOOK,还是不是呀,那还得要注入!
    问题难在于,那个程序一启动就马上调用FindWindow,我现在要在他调用之前把这个函数HOOK了!
    试了好多方法都不行!
    暂时进程的运行,也不行,像我上面说的,软件的线程没法HOOK!
      

  6.   

    挂起以后,用CreateRemoteThread在目标进程上创建线程,入口函数是LoadLibrary,参数是你的DLL的名字的指针(需要在目标进程的地址空间内先开辟内存,存放该字符串,并返回目标进程里该指针的值)。在那个DLL的PROCESS_ATTACH里写上SetWindowHookEx
      

  7.   

    没明白楼主的意思,你把你的程序设置成全局Hook不行吗?只要你的程序先运行了,FindWindow的hook链上就会经过你的程序,你要hook的程序在后面启动,也要通过hook链,怎么会hook不到呢?