Например в консоли есть символ "#" в координатах (0,0) как узнать что там символ "#" ,а не "?"
Ответ
Штатные средства класса Console не позволяют читать напрямую из выходного буфера, хотя WinAPI, поверх которого работают методы Console, такое позволяет. Следовательно придется импортировать нужные функции руками. Выглядеть будет как-то так:
class Program
{
[StructLayout(LayoutKind.Sequential)]
struct COORD
{
public short X;
public short Y;
}
// http://pinvoke.net/default.aspx/kernel32/ReadConsoleOutputCharacter.html
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadConsoleOutputCharacter(
IntPtr hConsoleOutput,
[Out] char[] lpCharacter,
int nLength,
COORD dwReadCoord,
out int lpNumberOfCharsRead
);
// http://pinvoke.net/default.aspx/kernel32/GetStdHandle.html
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(
int nStdHandle
);
static void Main()
{
//выводим символ
Console.SetCursorPosition(10, 10);
char outChar = 'K';
Console.Write(outChar);
//читаем символ
char[] readBuffer = new char[1];
int readCount;
ReadConsoleOutputCharacter(GetStdHandle(-11), readBuffer, 1, new COORD() { X = 10, Y = 10 }, out readCount);
Console.SetCursorPosition(0, 0);
Console.WriteLine($"{readBuffer[0] == outChar}");
Console.ReadKey(false);
}
}
Демка построена на основе примеров кода с pinvoke.net с небольшими модификациями.
Комментариев нет:
Отправить комментарий