Хорошо, я узнал ТОННО об этом в последнее время.А вот некоторая информация, которая может оказаться полезной для некоторых людей =]
Код для создания процесса с использованием каналов / дескрипторов файлов в виде Stdin / out / err:
STARTUPINFO startInfo;
PROCESS_INFORMATION procInfo;
memset((void*) &startInfo, 0, sizeof (startInfo));
memset((void*) &procInfo, 0, sizeof (procInfo));
startInfo.cb = sizeof (startInfo);
startInfo.dwFlags = (STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW);
startInfo.wShowWindow = SW_HIDE; //No Console Window, Thanks.
startInfo.hStdInput = (HANDLE)inHandle;
startInfo.hStdOutput = (HANDLE)outHandle;
startInfo.hStdError = (HANDLE)errHandle;
char* pe = "cmd\0";
//This is the program to execute (eg: c:\\Windows\\System32\\cmd.exe)
CreateProcess(NULL,pe,NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&procInfo);
return procInfo.hProcess;
сейчасвсе это прекрасно и здорово, но есть еще один маленький кусочек информации, который действительно помог мне здесь.Вы можете использовать файловые дескрипторы для своих дескрипторов (in / out / err), чтобы вы могли использовать прямые сокеты без изменений, и у вас будет прямой доступ к входу и выходу процесса.
Итак, мой текущий метод создания скрытой консоли - это локально соединить два сокета, а затем использовать один из них в качестве дескрипторов stdInput && stdOutput && stdError для дочерней программы, которая вызывает cmd.Это быстро и легко.
Если вы не знаете, как соединить несколько розеток, просто загляните в руководство beej