windows控制台的屏幕缓冲区在哪里?

windows控制台的屏幕缓冲区在哪里?,windows,console,Windows,Console,在Windows中,我知道我可以将控制台输出重定向到文件: 命令>文件 但是如果我想在事后保存stdout的输出,会发生什么呢。?在我的例子中,控制台的宽度是160,许多输出行超出了控制台的边界(因此我不能用鼠标选择它们) 有没有办法访问某个地方的屏幕缓冲区?磁盘上有临时文件吗?(在linux中,它似乎只在RAM中,正如这里所讨论的 ) 是否有其他方法仅将部分stdoutput保存到文件中? (我知道我可以右键单击并选择“全部”,将其粘贴到文档中,然后进行编辑。我正在寻找一种解决方案,允许我直接

在Windows中,我知道我可以将控制台输出重定向到文件: 命令>文件

但是如果我想在事后保存stdout的输出,会发生什么呢。?在我的例子中,控制台的宽度是160,许多输出行超出了控制台的边界(因此我不能用鼠标选择它们)

有没有办法访问某个地方的屏幕缓冲区?磁盘上有临时文件吗?(在linux中,它似乎只在RAM中,正如这里所讨论的 )

是否有其他方法仅将部分stdoutput保存到文件中? (我知道我可以右键单击并选择“全部”,将其粘贴到文档中,然后进行编辑。我正在寻找一种解决方案,允许我直接选择一块“从屏幕上消失”的文本并将其重新粘贴到文档中)

我不想再次执行该命令的原因是输出非常长。 C:\Users\me>symchk/r C:\windows\system32/s SRV*C:\symbols*http://msdl.microsoft.com/download/symbols


这将缓存sys32文件夹中所有代码的调试符号表

没有具体说明。使用GetConsoleScreenBufferInfo()来发现几何体,并使用ReadConsoleOutputCharacter()从缓冲区读取文本。它不会很长,缓冲区不能大于64KB。这只能在进程中完成,如果不是程序,则需要使用重定向。屏幕缓冲区本身可能超过64KB。我通常使用120x5000。在Windows 8之前,用于读/写的缓冲区必须(远)小于64K。通过LPC在客户端和服务器(conhost.exe)之间传输大型消息需要使用固定大小的共享内存堆,因此必须滑动窗口。Windows 8+没有此限制,因为控制台使用设备驱动程序,即Windows可以调用
NtDeviceIoControlFile
NtReadFile
NtWriteFile
,而不使用LPC端口和共享内存。感谢您的评论。但我无法访问调试环境,在那里我可以输入诸如:ReadConsoleOutputCharacter()之类的语句,并让它们在运行的控制台进程上执行。我想我只需要复制所有内容(在控制台中右键单击->全选,再次右键单击,然后切换到记事本并粘贴)难道你不能创建一个调用
AttachConsole
的GUI,然后按照第一条注释的建议继续吗?