命令 CreateProcess C++

The Command CreateProcess C++

命令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);
    }

CreateProcess函数只能启动.exe和.bat文件。像 shell/Explorer 一样使用 ShellExecute[Ex] if you want to launch files

一个进程必须有一个 PE EXE 文件作为它的主文件,如果你要求 CreateProcess 启动其他东西,它只会失败。 ShellExecute 将在注册表中查找文件扩展名以找到要执行的正确可执行文件(或 COM 处理程序),这通常最终会使用您指定为命令行参数的文件代表您调用 CreateProcess .

使用带有 SEE_MASK_NOCLOSEPROCESS 标志的 ShellExecuteEx 可能 可能会给你一个可以等待的进程句柄,但你也必须为 hProcess 为 NULL。如果该文件类型的注册应用程序已经是 运行 并且使用 DDE 或 COM 在此现有应用程序实例中打开文件,就会发生这种情况...

如果您只想使用默认应用程序打开现有图片,请使用 ShellExectue API。例如:

ShellExecuteW(NULL, L"open", L"Z:\cat.PNG", NULL, NULL, SW_SHOW);

您也可以使用相同的方法用 mspaint 打开图像 API:

ShellExecuteW(NULL, L"open", L"C:\Windows\system32\mspaint.exe", L"Z:\cat.PNG", NULL, SW_SHOW);

ShellExecuteEx会让你等待完成进程。

您可以使用 CreateProcess. As @DavidHeffernan pointed out the second parameter of CreateProcess 做同样的事情,应该指向可写内存,否则会引发访问冲突。为了清楚起见,我将省略第一个参数。示例:

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);
}

强烈推荐阅读this CodeProject article(新手生成过程的初级指南)