SoL*_*Lux 4 c++ windows-console
我一直在尝试获取控制台的输出句柄,但它似乎不起作用。我用它来设置文本的颜色,但它没有改变。
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut, 0x0A)
Run Code Online (Sandbox Code Playgroud)
我尝试调试它,我认为手柄不正确。还有其他方法可以做到这一点吗?它不起作用是否正常?有修复吗?
谢谢!
编辑:让我澄清一下,我试图获取的句柄无效。我不知道如何解决它。我想我会开始寻找替代方案;也许我的代码有问题。
标准处理程序在进程创建期间初始化,如果您调用AllocConsole新控制台则稍后创建。 AllocConsole 可以更改标准句柄,但对于启动代码(例如 C 运行时库初始化)使用它们来说为时已晚。
在这种情况下最好的做法是CreateFileW(L"CONOUT$", ...),无论您是否附加到父进程的控制台,操作系统是否为您创建了一个控制台句柄,因为您的 PE 标头是/SUBSYSTEM:CONSOLE,或者您调用了 ,它都会获得一个控制台句柄AllocConsole。即使标准句柄被重定向,它也会获取控制台句柄。
如果您认为可以调用FreeConsole,则应确保关闭CreateFilefirst 返回的所有句柄。在一般情况下,控制台保持活动状态直到进程退出,您可以让操作系统在进程清理期间为您关闭句柄。