STARTUPINFO si = { sizeof(si) }; // setup needed to start magick
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = NULL;
DWORD flags = CREATE_NO_WINDOW;
// flags = 0;
**redirect_stdio_magick(inpath_with_lld, redir_stdio_files_begin); // just open the file**
// (const wchar_t*)
//mogstring = "magick mogrify -format jpg O:\\r.png"; // for testing
//std::wcout<<"MOGRIFY mogstring parameter=["<< (const wchar_t*)mogstring <<"]" << std::endl;
//djdebug5( _T("MOGRIFY mogstring parameter=[") + mogstring + _T("]"));
//exit(0);
std::ostringstream mystream;
mystream << mogstring.GetString()<<std::endl;
std::string args = mystream.str();
//CString cstr(args.c_str());
USES_CONVERSION_EX;
//std::string text = args;
//LPWSTR parms= A2W_EX(args.c_str(), args.length());
LPWSTR parms = CT2W(mogstring);
std::wcout << "Mogrify:" <<std::endl;
//std::wcout << "parms1 = [" << parms << "]" << std::endl;
//std::wcout << "parms2 = [" << *parms << "]" << std::endl;
std::wcout << "mogstring = [" << mogstring.GetString() << "]" << std::endl; // THIS ONE WORKS!!!
;
LPWSTR bparm = _T(" C:\\1-lcl-bats\\typeit.bat this is the cmdline");
/*LPWSTR parms = CW2W(mogstring); */
si.hStdError = fp_magickerr; // indicate redirected std files
si.hStdOutput = fp_magickout;
si.hStdInput = NULL;
CString testparm= _T(" aha");
LPWSTR aha = _T(" \"aha\" ");
mret=CreateProcess(
// _T("C:\\Program Files\\ImageMagick-7.0.10-Q16-HDRI\\magick.exe"), // app nanme
//_T("C:\\Windows\\System32\\xcopy.exe" ), // this pair runs
//_T(" nosuch.bin out.bin"),
// following ran, but no output produced in redirected files
_T("E:\\BU-onedrive\\OneDrive - Binghamton University\\VS-projects\\basic_console_app\\Debug\\basic_console_app.exe"),
NULL,
//_T("C:\\Windows\\System32\\cmd.exe"), // need shellexec to do this
//_T("C:\\bats\\typeit.bat" ),
//(LPWSTR)CT2W(testparm), // need (LPWSTR) from CString NOT LPWCSTR
//_T(" aha"), // this is NOT an LPWSTR, but an LPWCSTR
//aha,
//parms, // (LPWSTR) from CString
//bparm,
NULL, // process sec attribs
NULL, // thread sec attribs
TRUE, // bool, inherit handles (yes, no)
flags, // creation flags
NULL, // Use parent's environment
double_all_bslashes(inpath_with_lld), // maybe needs an extra 0x0 ??
//NULL, // Use parent's curr dir
&si, // -> startup infostruct
&pi
);
if(mret) //successfull creation of process (Magick)
{ std::ostringstream myestream;
WaitForSingleObject(pi.hProcess, INFINITE);
BOOL fcnresult = GetExitCodeProcess(pi.hProcess, &exitcode); // exitcode is the actual process end value
// convert DWORD to a string for output in messages
myestream << exitcode;
std::string res = myestream.str();
std::cerr<<"mogrify_it ended. Actual rc=" << myestream.str() << std::endl;
std::cout << "mogrify_it ended. Actual rc=" << res << std::endl;
fflush(fp_magickout);
fflush(fp_magickerr);
//retcode 1= Incorrect function. Indicates that Action has attempted to execute
//a non-recognized command in Windows command prompt cmd.exe.
CString cstr(res.c_str()); // can't use c_str inside messagebox, use this conversion to CString 1st
MessageBox(_T("mogrify success. Actual exitcode=[")+cstr+ _T("]"));
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
myexitcode = 0;
}