【问题标题】:Get PID from ShellExecute从 ShellExecute 获取 PID
【发布时间】: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); 这是我目前正在使用的。谢谢。

标签: c++ windows winapi java-native-interface jna


【解决方案1】:

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

【讨论】:

  • 请注意ShellExecuteEx 可以在不创建进程的情况下返回成功。 (例如,如果处理程序是单实例应用程序。)
猜你喜欢
  • 2016-05-16
  • 2015-06-23
  • 2012-08-29
  • 2017-08-25
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多