从ShellExecute获取PID

问题描述:

我正在从ShellExecuteEx启动一个进程,我真的需要获得ProcessID(这是此类的要求的一部分)。从ShellExecute获取PID

不知何故,所有重要的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)。

请问有人能指出我的错误吗?谢谢。

您需要在exInfo.fMask中设置一个标志(SEE_MASK_NOCLOSEPROCESS)

+0

真棒!像魅力一样工作。谢谢! – David

+1

请注意,'ShellExecuteEx'可以在不创建进程的情况下返回成功。 (例如,如果处理程序是单实例应用程序。) –