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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2009, 20:23   #1
Skrutik
Новичок
Джуниор
 
Регистрация: 02.03.2009
Сообщений: 2
По умолчанию Копирование части экрана консоли в C#

Здравствуйте, необходимо из программы на C# скопировать(в память) часть экрана консоли. Некий аналог Console.MoveBufferArea. Подскажите пожалуйста как это можно сделать
Skrutik вне форума Ответить с цитированием
Старый 03.03.2009, 17:29   #2
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

Код:
Process p1 = new Process();
p1.StartInfo.UseShellExecute = true;
p1.StartInfo.RedirectStandardOutput = false;
p1.StartInfo.FileName = "cmd.exe";
p1.StartInfo.Arguments = "dir >> log.txt";
p1.Start();
p1.WaitForExit();
потом из log.txt вырезаешь нужный тебе кусок
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 03.03.2009, 18:47   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Вот если поможет реализация самой этой функции:
Код:
public static unsafe void MoveBufferArea(int sourceLeft, int sourceTop, int sourceWidth, int sourceHeight, int targetLeft, int targetTop, char sourceChar, ConsoleColor sourceForeColor, ConsoleColor sourceBackColor)
{
    if ((sourceForeColor < ConsoleColor.Black) || (sourceForeColor > ConsoleColor.White))
    {
        throw new ArgumentException(Environment.GetResourceString("Arg_InvalidConsoleColor"), "sourceForeColor");
    }
    if ((sourceBackColor < ConsoleColor.Black) || (sourceBackColor > ConsoleColor.White))
    {
        throw new ArgumentException(Environment.GetResourceString("Arg_InvalidConsoleColor"), "sourceBackColor");
    }
    Win32Native.COORD dwSize = GetBufferInfo().dwSize;
    if ((sourceLeft < 0) || (sourceLeft > dwSize.X))
    {
        throw new ArgumentOutOfRangeException("sourceLeft", sourceLeft, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((sourceTop < 0) || (sourceTop > dwSize.Y))
    {
        throw new ArgumentOutOfRangeException("sourceTop", sourceTop, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((sourceWidth < 0) || (sourceWidth > (dwSize.X - sourceLeft)))
    {
        throw new ArgumentOutOfRangeException("sourceWidth", sourceWidth, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((sourceHeight < 0) || (sourceTop > (dwSize.Y - sourceHeight)))
    {
        throw new ArgumentOutOfRangeException("sourceHeight", sourceHeight, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((targetLeft < 0) || (targetLeft > dwSize.X))
    {
        throw new ArgumentOutOfRangeException("targetLeft", targetLeft, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((targetTop < 0) || (targetTop > dwSize.Y))
    {
        throw new ArgumentOutOfRangeException("targetTop", targetTop, Environment.GetResourceString("ArgumentOutOfRange_ConsoleBufferBoundaries"));
    }
    if ((sourceWidth != 0) && (sourceHeight != 0))
    {
        bool flag;
        Win32Native.CHAR_INFO[] char_infoArray3;
        new UIPermission(UIPermissionWindow.SafeTopLevelWindows).Demand();
        Win32Native.CHAR_INFO[] char_infoArray = new Win32Native.CHAR_INFO[sourceWidth * sourceHeight];
        dwSize.X = (short) sourceWidth;
        dwSize.Y = (short) sourceHeight;
        Win32Native.COORD bufferCoord = new Win32Native.COORD();
        Win32Native.SMALL_RECT readRegion = new Win32Native.SMALL_RECT();
        readRegion.Left = (short) sourceLeft;
        readRegion.Right = (short) ((sourceLeft + sourceWidth) - 1);
        readRegion.Top = (short) sourceTop;
        readRegion.Bottom = (short) ((sourceTop + sourceHeight) - 1);
        fixed (Win32Native.CHAR_INFO* char_infoRef = char_infoArray)
        {
            flag = Win32Native.ReadConsoleOutput(ConsoleOutputHandle, char_infoRef, dwSize, bufferCoord, ref readRegion);
        }
        if (!flag)
        {
            __Error.WinIOError();
        }
        Win32Native.COORD dwWriteCoord = new Win32Native.COORD();
        dwWriteCoord.X = (short) sourceLeft;
        Win32Native.Color color = (Win32Native.Color) ((short) (ConsoleColorToColorAttribute(sourceBackColor, true) | ConsoleColorToColorAttribute(sourceForeColor, false)));
        short wColorAttribute = (short) color;
        for (int i = sourceTop; i < (sourceTop + sourceHeight); i++)
        {
            int num2;
            dwWriteCoord.Y = (short) i;
            if (!Win32Native.FillConsoleOutputCharacter(ConsoleOutputHandle, sourceChar, sourceWidth, dwWriteCoord, out num2))
            {
                __Error.WinIOError();
            }
            if (!Win32Native.FillConsoleOutputAttribute(ConsoleOutputHandle, wColorAttribute, sourceWidth, dwWriteCoord, out num2))
            {
                __Error.WinIOError();
            }
        }
        Win32Native.SMALL_RECT writeRegion = new Win32Native.SMALL_RECT();
        writeRegion.Left = (short) targetLeft;
        writeRegion.Right = (short) (targetLeft + sourceWidth);
        writeRegion.Top = (short) targetTop;
        writeRegion.Bottom = (short) (targetTop + sourceHeight);
        if (((char_infoArray3 = char_infoArray) == null) || (char_infoArray3.Length == 0))
        {
            char_infoRef2 = null;
            goto Label_02C4;
        }
        fixed (Win32Native.CHAR_INFO* char_infoRef2 = char_infoArray3)
        {
        Label_02C4:
            flag = Win32Native.WriteConsoleOutput(ConsoleOutputHandle, char_infoRef2, dwSize, bufferCoord, ref writeRegion);
        }
    }
}
Hollander вне форума Ответить с цитированием
Старый 03.03.2009, 19:13   #4
Skrutik
Новичок
Джуниор
 
Регистрация: 02.03.2009
Сообщений: 2
По умолчанию

Спасибо огромное! очень помогли!
Skrutik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерфейс в консоли HKBD Общие вопросы C/C++ 3 01.03.2009 16:30
Выделение и копирование части документа на основе структуры файла satyr_of_frost Microsoft Office Word 23 12.02.2009 09:15
от консоли к окну ёжик Общие вопросы C/C++ 3 06.04.2008 17:51
таймер в консоли Спартак Общие вопросы Delphi 5 07.02.2008 10:42