2011-10-01 62 views
2

我正在從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)。

請問有人能指出我的錯誤嗎?謝謝。

回答

2

您需要在exInfo.fMask中設置一個標誌(SEE_MASK_NOCLOSEPROCESS)

+0

真棒!像魅力一樣工作。謝謝! – David

+1

請注意,'ShellExecuteEx'可以在不創建進程的情況下返回成功。 (例如,如果處理程序是單實例應用程序。) –