ShellExecute で呼び出した exe の戻り値を取得するには
ShellExecute関数の代わりにShellExecuteEx関数を使用し、Process_INFORMATION構造体を使ってプロセスのハンドルとIDを取得することで、ShellExecute呼び出し元exeの戻り値を取得することができます。次に、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 関数を置き換えることを検討してください。