如何在 C# 控制台应用程序中获取光标处的字符?

Ufu*_*çok 2 c# console cursor

我知道如何使用SetCursorPositionCursorLeftCursorTop将光标设置到控制台中的特定点。那不是问题。

但是,我怎样才能得到那个点的价值呢?没有像Console.Cursor这样的东西吗?所以我可以得到那个位置的角色?也许是这样的:

char c = Console.GetCharAtCursor();
Run Code Online (Sandbox Code Playgroud)

没运气?

x0n*_*x0n 5

AFAIK,您必须将整个控制台缓冲区作为二维缓冲区读取,并使用光标的 X 和 Y 坐标作为该缓冲区的索引。看:

[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool GetConsoleScreenBufferInfo(
    IntPtr consoleHandle,
    out CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关缓冲区结构的信息:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093(v=vs.85).aspx

更新:

如果您对使用控制台 API 进行游戏编写感兴趣,有人为控制台编写了空间入侵者(实际上是 powershell),但所有 API 都是托管代码,而不是脚本。他有精灵/路径例程等 - 来源在http://ps1.soapyfrog.com/2007/08/26/grrr-source-code-include-invaders/

  • @UfukSarpSelçok:如果您正在编写控制台游戏,我建议您将自己的屏幕缓冲区副本保存在 2D 数组中。 (3认同)