命令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);
}
答案 0 :(得分:0)
CreateProcess
函数只能启动.exe和.bat文件。如果您希望ShellExecute[Ex]
与shell / Explorer相同,请使用launch files。
进程必须有一个PE EXE文件作为其主文件,如果你要求CreateProcess
启动其他内容,它就会失败。 ShellExecute
将在注册表中查找文件扩展名以查找要执行的正确可执行文件(或COM处理程序),这通常最终代表您使用您指定为命令行参数的文件调用CreateProcess
使用ShellExecuteEx
标记可能的SEE_MASK_NOCLOSEPROCESS
可能会为您提供一个可以等待的进程句柄,但您还必须为hProcess
为NULL做好准备。如果文件类型的已注册应用程序已在运行且使用DDE或COM在此现有应用程序实例中打开文件,则会发生这种情况......
答案 1 :(得分:0)
如果您只想使用defualt app打开现有图片,请使用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的第二个参数应指向可写内存,否则会引发访问冲突。为了说清楚,我将省略第一个参数。例如:
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(新手的产生过程基本指南)。