1

我有一个小的 winmain 应用程序。这是一个 winmain,因为我不希望它在启动时闪烁控制台。但是如果它是从控制台启动的,我想在这个控制台中打印。

这可能吗 ?

4

2 回答 2

1

这是我保留的解决方案:

if ( AttachConsole(ATTACH_PARENT_PROCESS) )
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    int fd = _open_osfhandle((intptr_t)hStdOut, _O_TEXT);
    if (fd > 0) *stdout = *_fdopen(fd, "w");
}
于 2017-11-07T11:45:53.897 回答
1

正如 eryksun 在评论中指出的那样,AttachConsole它并不完美,因为 cmd.exe 只等待控制台应用程序。

一个偷偷摸摸的解决方法是有一个小控制台帮助程序 .exe,您将其重命名为 .com。它位于您和父控制台应用程序之间。您仍然需要使用AttachConsoleDuplicateHandle访问 GUI 应用程序中的控制台句柄...

于 2017-11-07T13:30:08.243 回答