-4

コマンド CreateProcess コマンド WaitForSingleObject で画像を開くことができますか? はいの場合、どうすれば画像を開くことができますか? 開こうとしたが分からない 開くパスをどこに置くべきか

    if (CreateProcess(NULL, "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        WaitForSingleObject(pi.hProcess, INFINITE);

        CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
    }
4

2 に答える 2

1

デフォルトのアプリを使用して既存の画像を開くだけの場合は、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 の記事(プロセスを生成するための初心者向け基本ガイド)を読むことを強くお勧めします。

于 2018-04-02T12:47:07.687 に答える