Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 15:36   #1
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию C# Консоль. Узнать символ под курсором

Скажите, пожалуйста, как узнать символ, который в данный момент находится под курсором?
Код:
Console.CursorLeft = 10;
Console.CursorTop = 1;
char c = ?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 11.09.2009, 21:51   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Вот здесь (пост #4) интересный вариант.

Если кому интересно, прямой перевод на Delphi:

Код:
uses Windows, Classes;

var hConsoleOutput : THandle;
    buffer : array [0..26] of CHAR_INFO;
    BufferSize : _COORD;
    BufferCoord : _COORD;
    ReadRegion : TSmallRect;
    i:integer;
begin
   Writeln('testString');
   readln;

   hConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
   BufferSize.X := 7;
   BufferSize.Y := 4;
   BufferCoord.X := 0;
   BufferCoord.Y := 0;
   ReadRegion.Left := 0;
   ReadRegion.Top  := 0;
   ReadRegion.Right := 6;
   ReadRegion.Bottom := 3;
   ReadConsoleOutput(hConsoleOutput , @Buffer[0], BufferSize,
                 BufferCoord, ReadRegion);

   for i := 0 to 26 do
      Write(Buffer[i].UnicodeChar);
                  

   readln;
end.
alexBlack вне форума Ответить с цитированием
Старый 11.09.2009, 22:44   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Спасибо, конечно, большое. Но у меня закрались подозрения, что в посте номер 4 код написан не на C#, а на VB.Net, что не есть одно и то же и является для меня китайской грамотой.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 12.09.2009, 00:36   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

то-же самое на C#
Код:
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace test
{
    class Example
    {
        enum Handles
        {
            STD_INPUT = -10,
            STD_OUTPUT = -11,
            STD_ERROR = -12
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct CHAR_INFO
        {
            public short AsciiChar;
            public short Attributes;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct COORD
        {
            public short X;
            public short Y;
            public COORD(short x, short y){ this.X = x; this.Y = y;}
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct SMALL_RECT 
        {
            public short Left;
            public short Top;
            public short Right;
            public short Bottom;
            public SMALL_RECT(short l, short t, short r, short b)
            {
                Left = l; Top = t; Right = r; Bottom = b;
            }
        } 

        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        static extern IntPtr GetStdHandle(Handles nStdHandle);

        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        static extern bool ReadConsoleOutput(IntPtr nStdHandle, 
            ref CHAR_INFO lpBuffer, COORD dwBufferSize, 
            COORD dwBufferCoord, ref SMALL_RECT lpReadRegion);

        static void Main()
        {
            Console.WriteLine("1234567");
            Console.WriteLine("ABCDEFG");
            Console.WriteLine("abcdefg");
            Console.WriteLine("qwerty=");

            IntPtr hConsoleOutput = GetStdHandle(Handles.STD_OUTPUT);
            CHAR_INFO[] Buffer = new CHAR_INFO[28];
            COORD BufferSize = new COORD(7, 4);
            COORD BufferCoord = new COORD(0, 0);
            SMALL_RECT ReadRegion = new SMALL_RECT(0, 0, 6, 3);

            ReadConsoleOutput(hConsoleOutput , 
                  ref Buffer[0], BufferSize, BufferCoord, ref ReadRegion);

            for (int i=0; i<28; i++)
            {
                Console.Write(Convert.ToChar(Buffer[i].AsciiChar));
            }
         
            Console.ReadLine();
        }
alexBlack вне форума Ответить с цитированием
Старый 13.09.2009, 12:56   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Спасибо
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как стереть символ перед курсором? rem37 Общие вопросы Delphi 4 30.04.2009 00:54
Как узнать HANDLE компонента который находится под курсором мыши SeRhy Общие вопросы Delphi 7 04.02.2009 20:39
Получение слова под курсором. lazutov Win Api 4 15.08.2008 17:10
Как в TWebBrowser узнать адрес ссылки которая находится под курсором мышки SeRhy Общие вопросы Delphi 0 10.08.2008 10:11
окно под курсором mrandrey Win Api 1 11.05.2007 18:30