我想在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),表示"the specified process does not exist"。
似乎当CreateProcess返回时,cmd.exe的控制台尚未完全初始化,因为在AttachConsole解决问题之前添加Sleep(100);
。
那么我怎么能等到我可以在没有睡觉随机数的情况下使用AttachConsole?
答案 0 :(得分:0)
可能你可以编写一个与之通信的帮助控制台应用程序。它可以在主应用程序启动时发出信号(此时它的控制台将被创建)。主应用程序可以告诉助手什么/如何产生“真正的”儿童控制台应用程序。如果用C语言编写没有默认库,那么帮助程序最终可能只有几KB大,而不是很多开销。
答案 1 :(得分:0)
您可以在AttachConsole返回ERROR_GEN_FAILURE
时循环