デフォルトのアプリを使用して既存の画像を開くだけの場合は、ShellExectue API を使用します。例えば:
ShellExecuteW(NULL, L"open", L"Z:\\cat.PNG", NULL, NULL, SW_SHOW);
同じ API を使用して、mspaint で画像を開くこともできます。
ShellExecuteW(NULL, L"open", L"C:\\Windows\\system32\\mspaint.exe", L"Z:\\cat.PNG", NULL, SW_SHOW);
ShellExecuteEx は、終了プロセスを待機させます。
CreateProcessを使用して同じことができます。@DavidHeffernan が指摘したように、CreateProcessの 2 番目のパラメーターは書き込み可能なメモリを指す必要があります。そうしないと、アクセス違反が発生します。明確にするために、最初のパラメーターを省略します。例:
STARTUPINFOW process_startup_info{ 0 };
process_startup_info.cb = sizeof(process_startup_info); // setup size of strcture in bytes
PROCESS_INFORMATION process_info{ 0 };
wchar_t commandline_args[] = L"\"C:\\Windows\\system32\\mspaint.exe\" Z:\\cat.PNG";
if (CreateProcessW(NULL, commandline_args, NULL, NULL, TRUE, 0, NULL, NULL, &process_startup_info, &process_info))
{
//WaitForSingleObject(process_info.hProcess, INFINITE); // uncomment to wait till process finish
CloseHandle(process_info.hProcess);
CloseHandle(process_info.hThread);
}
この CodeProject の記事(プロセスを生成するための初心者向け基本ガイド)を読むことを強くお勧めします。