1

我想在 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 一个随机数呢?

4

2 回答 2

0

可能您可以编写一个与之通信的辅助控制台应用程序。它可以在启动时向您的主应用程序发出信号(届时将创建其控制台)。主应用程序可以告诉助手什么/如何生成“真正的”子控制台应用程序。如果在没有默认库的情况下用 C 语言编写,帮助程序最终可能只有几 KB 大,开销不大。

于 2013-10-02T06:33:59.407 回答
0

您可以在 AttachConsole 返回 ERROR_GEN_FAILURE 时循环

于 2015-12-29T08:50:41.907 回答