gpt4 book ai didi

c# - Console.Out 输出显示在输出窗口中,需要在 AllocConsole() 中

转载 作者:行者123 更新时间:2023-12-01 19:13:46 65 4
gpt4 key购买 nike

好吧,当需要 Winform 时,我总是使用 AllocConsole() 方法进行控制台输出,因为在写入控制台时我使用多种颜色.

使用 VS 2015 及以下版本, Debug模式下的 AllocConsole 始终正常工作,Console.WriteLine 可以正确写入。现在使用 VS 2017,当 AllocConsole 被调用时,控制台会显示,但是,console.WriteLine 输出不是转到该控制台,而是转到 Visual Studio 的输出窗口。

我更喜欢使用 AllocConsole 而不是输出窗口,因为我严重依赖颜色。我已经做了很多关于如何解决这个问题的搜索,但我似乎找不到答案。

最佳答案

AllocConsole() 本身不起作用,因为 VS 2017 做了一些“调试标准输出重定向魔法”。要解决此问题,您需要使用 AllocConsole() 创建一个控制台并修复 stdout 句柄。

这是我找到的截图:

[DllImport("kernel32.dll",
EntryPoint = "AllocConsole",
SetLastError = true,
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
private static extern int AllocConsole();

[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr CreateFile(
string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
uint lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
uint hTemplateFile);

private const int MY_CODE_PAGE = 437;
private const uint GENERIC_WRITE = 0x40000000;
private const uint FILE_SHARE_WRITE = 0x2;
private const uint OPEN_EXISTING = 0x3;

public static void CreateConsole()
{
AllocConsole();

IntPtr stdHandle = CreateFile(
"CONOUT$",
GENERIC_WRITE,
FILE_SHARE_WRITE,
0, OPEN_EXISTING, 0, 0
);

SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);
FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);
Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);

Console.Write("This will show up in the Console window.");
}

特别感谢 Ramkumar Ramesh 的解决方法: Console Output is gone in VS2017

关于c# - Console.Out 输出显示在输出窗口中,需要在 AllocConsole() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624103/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com