【问题标题】:How do I print colors into the console with D?如何使用 D 将颜色打印到控制台?
【发布时间】:2012-02-19 16:17:40
【问题描述】:

我已经尝试过使用 writeln() 函数的转义序列,我还尝试将它们与从 std.c.stdlib 模块导入的 printf() 函数一起使用,但它只打印一个空行。

printf("\0x1B[5;32;40m Blink Text");

printf("\e[5;32;40m Blink Text\e[m");

writeln("\0x1b\x5b1;31;40m\tColor");

这些都不起作用。

我能想到的都试过了,有办法吗?

搜索 D 网站的图书馆参考对我没有帮助。


编辑:解决方案

好的,所以我尝试导入函数 SetConsoleTextAttribute,正如 Mars 所建议的那样:

extern (Windows) bool SetConsoleTextAttribute(void*, ushort);

我还导入了另一个函数(我只是猜想我需要导入,因为我以前没有 Win 编程经验)

extern (Windows) void* GetStdHandle(uint);

并且简单的调用了这两个函数

auto handle  = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_BLUE);
writeln("In Color");

这很好用,非常感谢大家的时间和帮助

【问题讨论】:

    标签: colors console escaping d


    【解决方案1】:

    就像 Cyber​​Shadow 指出的那样,您必须使用 \x1B 或 \033。只要您在 Linux 上,它应该可以正常工作。但 Windows 不支持这些代码。在这里你必须使用来自 std.c.windows.windows 的 API 函数SetConsoleTextAttribute

    【讨论】:

      【解决方案2】:

      您的字符串中有错字:使用\x1B 而不是\0x1B

      D 不支持字符串中的\e 转义码,请使用\x1B

      【讨论】:

      • 复制粘贴你的 writeln(),控制台给了我这个输出:“[1;31;40m Color”
      • 您正在尝试使用终端仿真器运行它,对吗? (也就是说,不是 Windows 控制台等)
      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2014-01-28
      相关资源
      最近更新 更多