从 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 正在返回 0exInfo.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()函数,从后台打开一个网页

如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]

ShellExecute函数打开exe可执行文件问题

Win32 ShellExecute 和 UNC 路径

C++用ShellExecute传递参数的问题

VB中ShellExecute语法问题