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 . 这个 可以 生成更快的输出,因为您将把所有输出写入非活动缓冲区。 |
brudnak · 用户输入2d多维数组 6 年前 |
Denis · 如何设置最小控制台大小C#? 6 年前 |
alelom · 显示用于登录ASP Core 2的控制台 6 年前 |
Ivo van der Bruggen · 控制台在获取整数后暂停 6 年前 |
Jakub Krampl · 通过HttpClient发送大文件 6 年前 |
vibs · .net core 2.0控制台应用程序:exe文件位置 7 年前 |