Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Как узнать символ в консоли под курсором?

Например в консоли есть символ "#" в координатах (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 с небольшими модификациями.

Комментариев нет:

Отправить комментарий