Ваши параметры для CreateProcessA()
все неверны. Попробуйте вместо этого:
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
std::string p = pic.getPath();
std::string cmd = "C:\\Windows\\system32\\mspaint.exe \"" + p + "\"";
if (CreateProcessA(NULL, const_cast<LPSTR>(cmd.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo))
{
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
Что касается закрытия процесса MSPaint, вы не используете для этого CTRL- C. Найдите HWND
, который принадлежит окну MSPaint, и затем отправьте ему сообщение WM_CLOSE
или WM_QUIT
. CreateProcess()
сообщает вам идентификатор основного потока порожденного процесса, используйте EnumThreadWindows()
, чтобы найти HWND
s, которые принадлежат этому потоку. А затем используйте SendMessage()
для отправки сообщений на него.