Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
29th
Окт
Копирование части экрана консоли
Posted by maloy under Архив, си шарп
Необходимо из программы на C# скопировать(в память) часть экрана консоли. Некий аналог Console.MoveBufferArea. Подскажите пожалуйста как это можно сделать
TaTT DoGG
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 вырезаешь нужный тебе кусок
Hollander
Вот если поможет реализация самой этой функции:
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);
}
}
}
тема на форуме от 2009 года
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)