gpt4 book ai didi

c++ - 无法获得 AllocConsole 的 STD 句柄

转载 作者:太空狗 更新时间:2023-10-29 21:12:56 25 4
gpt4 key购买 nike

我一直在尝试获取控制台的输出句柄,但它似乎不起作用。我得到它来设置我的文本的颜色,但它没有改变。

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut, 0x0A)

我尝试调试它,但我认为句柄不正确。有没有其他方法可以做到这一点,它不起作用是否正常?有任何修复吗?

谢谢!

编辑: 让我澄清一下,我尝试获取的句柄无效。我不知道如何解决它。我想我会开始寻找替代品;也许我的代码有问题。

最佳答案

标准处理程序在进程创建期间初始化,如果您调用 AllocConsole,新控制台将在很晚之后创建。 AllocConsole 可以更改标准句柄,但对于启动代码(例如 C 运行时库初始化)使用它们来说已经太迟了。

在这种情况下最好的做法是 CreateFileW(L"CONOUT$", ...),无论您是否附加到父进程的控制台,操作系统,它都会获得一个控制台句柄为您创建了一个,因为您的 PE header 是 /SUBSYSTEM:CONSOLE,或者您调用了 AllocConsole。即使重定向了标准句柄,它也会获得控制台句柄。

如果您认为您可以调用 FreeConsole,您应该确保首先关闭 CreateFile 返回的所有句柄。在控制台保持事件状态直到进程退出的一般情况下,您可以让操作系统在进程清理期间为您关闭句柄。

关于c++ - 无法获得 AllocConsole 的 STD 句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822816/

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