好吧,我在最近的一段时间里学到了很多。以下是一些可能对某些人有用的信息 =]
使用管道/文件描述符作为标准输入/输出/错误创建进程的代码:
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),这样您就可以使用直接套接字,无需修改,并且可以直接访问进程的输入和输出。
所以我目前创建隐藏控制台的方法是在本地将两个套接字连接在一起,然后将其中一个套接字用作调用 cmd 的子程序的 stdInput && stdOutput && stdError 描述符。它又快又容易。
如果您不知道如何将一些套接字连接在一起,请查看beej's guide