我想在 Windows 中编写一个控制台模拟器。我需要从 GUI 应用程序启动一个 cmd.exe(使用 SW_HIDE),然后 AttachConsole 它。
// cmdline is a writable L"cmd"
// start_info contains a SW_HIDE
PROCESS_INFORMATION proc_info;
CreateProcess(NULL, cmdline, NULL, NULL, false, 0, NULL, NULL, &start_info, &proc_info);
AttachConsole(proc_info.dwProcessId);
但是 AttachConsole 失败并显示 ERROR_GEN_FAILURE (31),表示“指定的进程不存在”。
看来当 CreateProcess 返回时,cmd.exe 的控制台还没有完全初始化,因为Sleep(100);
在 AttachConsole 之前添加一个可以解决问题。
那么我怎么能等到我可以 AttachConsole 而不用 Sleep-ing 一个随机数呢?