从 ShellExecute 获取 PID
Posted
技术标签:
【中文标题】从 ShellExecute 获取 PID【英文标题】:Get PID from ShellExecute 【发布时间】:2011-10-01 12:53:26 【问题描述】:我正在从 ShellExecuteEx 启动一个进程,我确实需要获取 ProcessID(这是此类要求的一部分)。
不知何故,所有重要的 SHELLEXECUTEINFO
都返回 null。
因此,例如,如果我使用此代码:
exInfo.lpVerb = "open";
exInfo.lpFile = "C:\\Windows\\system32\\cmd.exe";
exInfo.nShow = 5;
ShellExecuteExA(exInfo);
它启动了 CMD.exe。但现在我需要得到它的PID。
exInfo.hwnd
正在返回 0
,exInfo.hProcess
正在返回 null
。
这是正常行为吗?
我真的不想求助于使用 CreateProcess(),因为我的函数也应该能够启动像“C:\doc1.docx”这样的文档。这只是一种方法,我无法预测将要启动什么(所以我无法事先知道窗口标题/类名,从那里获取 hWnd 然后获取 PID)。
有人能指出我的错误吗?谢谢。
【问题讨论】:
您能否进一步解释一下如何从 ShellExecuteInfo 获取 PID,因为我自己也在寻找一种方法。DWORD PID = GetProcessId(exInfo.hProcess);
这是我目前正在使用的。谢谢。
【参考方案1】:
您需要在 exInfo.fMask 中设置一个标志 (SEE_MASK_NOCLOSEPROCESS)
【讨论】:
请注意ShellExecuteEx
可以在不创建进程的情况下返回成功。 (例如,如果处理程序是单实例应用程序。)以上是关于从 ShellExecute 获取 PID的主要内容,如果未能解决你的问题,请参考以下文章
如何利用ShellExecute()函数,从后台打开一个网页