没看懂哎。 你不能用WaitForSingleObject等待CreateProcess返回到lpProcessInformation中的句柄吗? 而且这个句柄如果你不调用CloseHandle的话会泄漏哎。

解决方案 »

  1.   


    额, 调用了过没用,按说CreateProcess以后,Wait应该阻塞在那的吧,但是,直接就越过去了。那句柄就是失效了呗?        因为比如你用UE打开了个txt文件,此时UE是一个进程,再打开一个txt呢,这时候UE中只是增加了一页,虽然CreateProcess中有那个进程句柄啊,但是那个句柄是无效的啊。
      

  2.   

    MSDN中说了这么一句:
    SHELLEXECUTEINFO
    Handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Microsoft® Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL.
      

  3.   


    额, 调用了过没用,按说CreateProcess以后,Wait应该阻塞在那的吧,但是,直接就越过去了。那句柄就是失效了呗?        因为比如你用UE打开了个txt文件,此时UE是一个进程,再打开一个txt呢,这时候UE中只是增加了一页,虽然CreateProcess中有那个进程句柄啊,但是那个句柄是无效的啊。
    你还能用CreateProcess打开txt?  打开文件关联程序不是ShellExecute干的事吗?如果你是用CreateProcess(NULL, "UtraEdit.exe aaa.txt"...)来打开的话那么返回的那个hProcess就是创建的进程handle,只不过是该进程已经执行完成了,比如UE进程内部可能会判断是否有另一个实例已经运行了,如果是那么将传入的参数通过进程间通讯发给另一个实例然后自身退出了。 但是CreateProcess返回的的确是一个合法进程句柄嘛。 那么你也需要找到另一个进程然后再等待它。
      

  4.   


    额, 调用了过没用,按说CreateProcess以后,Wait应该阻塞在那的吧,但是,直接就越过去了。那句柄就是失效了呗?        因为比如你用UE打开了个txt文件,此时UE是一个进程,再打开一个txt呢,这时候UE中只是增加了一页,虽然CreateProcess中有那个进程句柄啊,但是那个句柄是无效的啊。
    你还能用CreateProcess打开txt?  打开文件关联程序不是ShellExecute干的事吗?如果你是用CreateProcess(NULL, "UtraEdit.exe aaa.txt"...)来打开的话那么返回的那个hProcess就是创建的进程handle,只不过是该进程已经执行完成了,比如UE进程内部可能会判断是否有另一个实例已经运行了,如果是那么将传入的参数通过进程间通讯发给另一个实例然后自身退出了。 但是CreateProcess返回的的确是一个合法进程句柄嘛。 那么你也需要找到另一个进程然后再等待它。额,是这样的,但是对UE来说,一个文件就已经不再是一个进程了,所以,等待UE的进程的话就不大准确了,有没有个其他的办法,能针对于每个文件,判断他关闭的时机
      

  5.   

    一个比较笨的方法,可以做为保低用,楼主式式枚举进程看看是否可行。基本方法就是开一个线程在轮循环监视,看后一次比前一次少了哪些进程。参考“http://bbs.csdn.net/topics/350121554”这个帖子使用快照可以枚举出当前所有打开的进程,如果UE打开的txt也是一个进程的话,就应该可以枚举出来,如果枚举不出来,就说明UE打开的txt是他的一个子窗口什么的,到时可以枚举窗口来式。一步一步来吧!
      

  6.   

    你要跟踪文件关闭? 没有意义。 比如UE打开txt,读取内容生成标签然后会立即关闭文件,当标签中文件内容修改后关闭标签时才会重新打开文件,写入内容然后关闭文件。 还不如用FindFirstChangeNotification(), FindNextChangeNotification(),ReadDirectoryChangesW()跟踪文件修改。
      

  7.   

    如notepad.exe一次只打开一个文件是好监控的,但是如ue,一个进程可能打开多个文件,至于人家打开一个文件关闭一个文件,作了什么操作,你是不知道的,所以你的问题在类似ue的软件中,无解。