Страницы

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

четверг, 2 апреля 2020 г.

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

#c_sharp #console

                    
Например в консоли есть символ "#" в координатах (0,0)
как узнать что там символ "#" ,а не "?"
    


Ответы

Ответ 1



Штатные средства класса 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 с небольшими модификациями.

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

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