Команда 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);
}
Если вы просто хотите открыть существующее изображение с помощью приложения defualt, используйте 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. Как @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);
}
Я настоятельно рекомендую прочитать эта статья CodeProject (Элементарное руководство новичка по нерестовым процессам).
CreateProcess
Функция может запускать только файлы .exe и .bat. использование ShellExecute[Ex]
если хотите запускать файлы так же, как оболочка / проводник.
Процесс должен иметь PE EXE-файл в качестве основного файла, и если вы спросите CreateProcess
чтобы начать что-то еще, он просто потерпит неудачу. ShellExecute
будет искать расширение файла в реестре, чтобы найти правильный исполняемый файл (или COM-обработчик) для выполнения, и это часто заканчивается вызовом CreateProcess
от вашего имени с файлом, который вы указали в качестве параметра командной строки.
С помощью ShellExecuteEx
с SEE_MASK_NOCLOSEPROCESS
флаг может быть может дать вам ручку процесса, на котором вы можете подождать, но вы также должны быть готовы к hProcess
быть NULL. Это может произойти, если зарегистрированное приложение для типа файла уже запущено и DDE или COM был использован для открытия файла в этом существующем экземпляре приложения …