命令 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(新手生成过程的初级指南)
命令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(新手生成过程的初级指南)