我有一个小的 winmain 应用程序。这是一个 winmain,因为我不希望它在启动时闪烁控制台。但是如果它是从控制台启动的,我想在这个控制台中打印。
这可能吗 ?
我有一个小的 winmain 应用程序。这是一个 winmain,因为我不希望它在启动时闪烁控制台。但是如果它是从控制台启动的,我想在这个控制台中打印。
这可能吗 ?
这是我保留的解决方案:
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");
}
正如 eryksun 在评论中指出的那样,AttachConsole
它并不完美,因为 cmd.exe 只等待控制台应用程序。
一个偷偷摸摸的解决方法是有一个小控制台帮助程序 .exe,您将其重命名为 .com。它位于您和父控制台应用程序之间。您仍然需要使用AttachConsole
或DuplicateHandle
访问 GUI 应用程序中的控制台句柄...