![]() |
1
43
更新:
添加了一个示例
基本上,如果您获得了控制台缓冲区的句柄,那么您就可以使用标准的win32 apis来操作缓冲区,甚至可以在屏幕外构建整个缓冲区,并将其直接发送到控制台。 唯一棘手的部分是获取控制台缓冲区的句柄。我没有在.NET中尝试过这个方法,但是在过去的几年中,您可以通过使用createfile(您需要p/invoke这个)和打开“conout$”来获得当前控制台的句柄,然后您可以使用返回到其他API的句柄。
创建文件的P/Invoke
您可以使用writeconsoleoutput将所有字符及其属性从内存缓冲区移动到控制台缓冲区。
您可以将一个不错的库放在一起,以提供对控制台缓冲区的较低级别访问。 因为我想让我的.NET重新运行起来,所以我想我会试试这个方法,看看是否能让它正常工作。下面是一个示例,它将在屏幕上填充所有字母a-z,并运行所有地面属性0-15。我想你会对表演印象深刻的。老实说,我没有花太多时间检查这段代码,所以错误检查是零,这里或那里可能有一个小错误,但它应该可以让您使用其余的API。
|
![]() |
2
5
如果你看一下
从几个msdn文档页中,每个屏幕缓冲区(控制台有一个)都有一个二维的字符信息记录数组,每个字符信息记录由一个
CHAR_INFO
. 这就是决定每个字符颜色的原因。您可以使用
除非在控制台文本颜色属性中有一个较低级别的钩子(看起来不太可能),否则我认为您一直在使用这些方法。 您可以尝试创建一个新的屏幕缓冲区,写入该缓冲区,然后使用 SetConsoleActiveScreenBuffer . 这个 可以 生成更快的输出,因为您将把所有输出写入非活动缓冲区。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |