SetConsoleActiveScreenBuffer不显示屏幕缓冲区现代GPU)。由于System.Console类不提供切换缓冲区的方法,我不得不从kernel32.dll中P/Invoke几个方法。这是我当前的代码,大大简化了:staticvoidMain(string[]args){IntPtroldBuffer=GetStdHandle(-11);//获取默认控制台缓冲区的句柄IntPtrnewBuffer=CreateConsoleScreenBuffer(0,0x00000001,IntPtr.Zero,1,0);//创建一个新的控制台缓冲区/*将数据写入newBuffer*/SetConsoleActiveScreenBuffer(newBuffer);下面是发生的情况:我应该注意到我很少直接使用Win32API,并且对常见的LittleisknownaboutWin32相关问题不感兴趣。我将不胜感激任何帮助。正如IInspectable在评论中指出的那样,您将dwDesiredAccess设置为零。这为您提供了一个没有访问权限的句柄。在某些边缘情况下,这样的句柄很有用,但这不是其中之一。唯一有点奇怪的是您得到的是“无效句柄”而不是“拒绝访问”。我猜你运行的是Windows7,所以句柄是用户模式对象(“伪句柄”)而不是内核句柄。无论如何,您需要将dwDesiredAccess设置为GENERIC_READ|GENERIC_WRITEGENERIC_READ|GENERIC_WRITE如示例代码所示。此外,正如Hans在评论中指出的那样,pinvoke.net上的声明是不正确的,将最后一个参数指定为四字节整数而不是指针大小的整数。相信正确的说法是,以上是C#学习教程:SetConsoleActiveScreenBuffer不显示屏幕缓冲区共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多加关注——IntPtrlpSecurityAttributes,uintdwFlags,IntPtrlpScreenBufferData);如需转载请注明出处:
