Чтобы скрыть окно, попробуйте передать SH_HIDE при вызове CreateProcess для lpStartupInfo.
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
CreateProcess(/*...*/, &si /*...*/);
Если вы хотите собрать результаты, вы можете вызвать CreateFile для получения дескриптора файла и передать дескриптор в STARTUPINFOструктуру, затем прочитайте ее, когда CreateProcess вернет:
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.hStdOutput = hOutput;
si.hStdError = (HANDLE) STD_ERROR_HANDLE;
si.hStdInput = (HANDLE) STD_INPUT_HANDLE;
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
CreateProcess(/*...*/, &si /*...*/);