要獲取ShellExecute調用的exe的返回值,可以使用ShellExecuteEx函數來替代ShellExecute函數,并使用PROCESS_INFORMATION結構來獲取進程的句柄和ID。然后,使用WaitForSingleObject函數等待進程的結束,最后使用GetExitCodeProcess函數獲取進程的返回值。
以下是示例代碼:
#include <windows.h>
#include <shellapi.h>
int main()
{
SHELLEXECUTEINFO sei = { 0 };
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = L"open";
sei.lpFile = L"C:\\path\\to\\your.exe";
sei.lpParameters = L"parameters";
sei.nShow = SW_HIDE;
if (ShellExecuteEx(&sei))
{
WaitForSingleObject(sei.hProcess, INFINITE);
DWORD exitCode = 0;
GetExitCodeProcess(sei.hProcess, &exitCode);
// 使用exitCode來獲取返回值
CloseHandle(sei.hProcess);
}
return 0;
}
在這個示例代碼中,我們創建了一個SHELLEXECUTEINFO結構,并設置了需要執行的exe的路徑,參數等信息。然后使用ShellExecuteEx函數來執行命令,并獲取進程的句柄和ID。接著,使用WaitForSingleObject函數等待進程的結束,使用GetExitCodeProcess函數獲取進程的返回值,最后關閉進程的句柄。
請注意,ShellExecuteEx函數在Windows XP及更高版本上可用,如果你的應用程序需要兼容更早的Windows版本,可以考慮使用CreateProcess函數來替代ShellExecuteEx函數。