Для чего нужна консольная программа

Консольное приложение в контексте C # — это приложение, которое принимает ввод и отображает вывод на консоли командной строки с доступом к трем основным потокам данных: стандартный ввод, стандартный вывод и стандартная ошибка.

Консольное приложение облегчает чтение и запись символов с консоли — по отдельности или в виде целой строки. Это самая простая форма программы на C #, которая обычно вызывается из командной строки Windows. Консольное приложение обычно существует в виде отдельного исполняемого файла с минимальным графическим интерфейсом пользователя или без него.

Techopedia объясняет консольное приложение

Структура программы консольного приложения облегчает последовательный поток выполнения между операторами. Предназначенное для клавиатуры и экрана дисплея, консольное приложение управляется клавиатурой и системными событиями, генерируемыми сетевыми подключениями и объектами.

Консольное приложение в первую очередь разработано по следующим причинам:

  • Предоставить простой пользовательский интерфейс для приложений, требующих минимального взаимодействия с пользователем или не требующих его вообще, таких как примеры для изучения функций языка C # и служебные программы командной строки.
  • Автоматизированное тестирование, которое может уменьшить ресурсы автоматизации реализации.

Консольные приложения, разработанные на C #, имеют одну основную точку входа (статический основной метод) выполнения, которая принимает необязательный массив параметров в качестве единственного аргумента для представления параметров командной строки.

Уничтожаю C++

.NET Framework предоставляет библиотечные классы для быстрой разработки консольных приложений с возможностью вывода на экран в различных форматах. System.Console (закрытый класс) является одним из основных классов, используемых при разработке консольных приложений.

Одно из ограничений функциональности консольного приложения состоит в том, что строки, возвращаемые функциями консоли с использованием кодовой страницы изготовителя оборудования (OEM), могут неправильно обрабатываться функциями с использованием кодовой страницы Американского национального института стандартов (ANSI). Эта проблема может быть решена путем вызова функции SetFileApisToOEM для создания строк символов OEM, а не строк символов ANSI.

Это определение было написано в контексте C #

Что такое консольное приложение? - определение из техопедии

Приложение работает медленно? время уточнять

Приложение работает медленно? время уточнять

Нативное приложение или мобильное веб-приложение?

Нативное приложение или мобильное веб-приложение?

При принятии решения о разработке собственного приложения или мобильного веб-приложения необходимо учитывать множество факторов, поэтому здесь мы рассмотрим некоторые факторы.

Консольные приложения

Для этого есть приложение — в твоей машине

Для этого есть приложение - в твоей машине

Автомобильные приложения, которые часто называют информационно-развлекательными, существуют уже несколько лет. По большей части, предложения были скромными, с приложениями для потоковой передачи музыки, новостей и разговорного радио, а также приложениями GPS .

Источник: ru.theastrologypage.com

Осмысленное использование консольных приложений в C#

Когда что-то уже написано, оттестировано и достойно справляется со своей работой, то лучше использовать это средство, нежели изобретать велосипед. Например, есть консольная утилита cpctest.exe, которая позволяет выполнять все те-же действия что и графическая оболочка, и масса других утилит из стандартного набора Windows. На разработку, отладку и покрытие тестами аналогичной функциональности уйдет драгоценное время. Так зачем его прожигать? Приступим.

Читайте также:
Default что это за программа на Андроид

Для начала нам нужно залезть на MSDN и посмотреть синтаксис стандартных команд. В результате мы увидим, что запуск любого консольного приложения состоит из имени приложения и его параметров. Приложение инстанцируется системным классом Process. Прототип нашей функции для запуска консольного приложения будет выглядеть следующим образом:

bool Execute(string commandName, IEnumerable paramsList)

Если мы захотим получать результат выполнения запущенного приложения и обрабатывать его, нам потребуется соответствующий метод:

string GetResult (string commandName, IEnumerable paramsList)

Далее идем снова на MSDN и смотрим ProcessStartInfo Arguments, UseShellExecute, RedirectStandardOutput и RedirectStandardError, если Вы будете строго обрабатывать исключения как в Java. В итоге для инициализации процесса нам потребуется свойство, которое будет определять режим запуска консольного приложения и метод для инициации процесса. Для своего класса я использовал паттерн Facade.

public class CommandHelpers < public CommandHelpers() < Invisible = true; >public bool Invisible < get; set; >private Process CreateProcess(string commandName, IEnumerable paramsList, bool output = false) < string paramString = paramsList.Aggregate(null, (current, param) => current + » » + param); return new Process < StartInfo = < FileName = commandName, Arguments = paramString, UseShellExecute = output ? !output : !Invisible, RedirectStandardOutput = output >>; >

Необходимо учесть, что запускаемое приложение может работать бесконечно долго, например, ping –t youwebsite.org. Для его запуска нам потребуется соответствующий метод:

public Task ExecuteAsync(string commandName, IEnumerable paramsList)
Пример использования:
CommandHelpers.cs
using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Common.Security < /// /// See for correct use https://technet.microsoft.com/en-us/library/bb491070.aspx /// public class CommandHelpers < public CommandHelpers() < Invisible = true; >/// /// Not show CMD window /// public bool Invisible < get; set; >/// /// Execete CMD command /// /// Command name only /// Params and keys for command public bool Execute(string commandName, IEnumerable paramsList) < return CreateProcess(commandName, paramsList).Start(); >/// /// Async execete CMD command /// /// Command name only /// Params and keys for command public Task ExecuteAsync(string commandName, IEnumerable paramsList) < return Task.Factory.StartNew(() => CreateProcess(commandName, paramsList).Start()); > /// /// Returns result of command execution /// /// Command name only /// Params and keys for command /// public string GetResult(string commandName, IEnumerable paramsList) < var bufer = new StringBuilder(); using (var proc = CreateProcess(commandName, paramsList, true)) < proc.Start(); while (!proc.StandardOutput.EndOfStream) < bufer.AppendLine(proc.StandardOutput.ReadLine()); >> return bufer.ToString(); > /// /// Returns result of command execution /// Experemental. Not Tested. /// /// Command name only /// Params and keys for command /// public string GetResultAsync(string commandName, IEnumerable paramsList) < var bufer = new StringBuilder(); using (var proc = CreateProcess(commandName, paramsList, true)) < proc.OutputDataReceived += (sender, e) => < if (!string.IsNullOrEmpty(e.Data)) < bufer.AppendLine(e.Data); >>; proc.BeginOutputReadLine(); proc.EnableRaisingEvents = true; proc.WaitForExit(); > return bufer.ToString(); > private Process CreateProcess(string commandName, IEnumerable paramsList, bool output = false) < var paramString = paramsList.Aggregate(null, (current, param) => current + » » + param); return new Process < StartInfo = < FileName = commandName, Arguments = paramString, UseShellExecute = output ? !output : !Invisible, RedirectStandardOutput = output >>; > > >

Читайте также:
Faststone soft что это за программа

Источник вдохновения для статьи:
От пользователя vedmaka: toster.ru/q/7644

Источник: habr.com

Возможности консольных приложений для Windows

В настоящее время, когда у разработчиков программного обеспечения появляется всё больше возможностей для сознания приложений со сложным графическим интерфейсом, консольные приложения по-прежнему прочно удерживают свои позиции, даже в такой, казалось бы им среде, как современная операционная система Windows. Это объясняется в первую очередь простотой их исполнения и некоторыми специфическими особенностями консольных приложений, которые делают их в ряде случаев более подходящими для решения задачи, чем приложения с графическим интерфейсом. Один минус: выглядят такие приложения очень уныло и однообразно, как безликая серая масса букв и цифр на чёрном фоне окна консоли. Но не всё так безнадёжно, как может показаться на первый взгляд. В этой статье я попытаюсь дать несколько полезных рецептов расширения функциональности консольных приложений и придания их внешнему виду большей выразительности.

И так: начнём с заголовка окна консоли. При запуске программы в заголовке окна отображается полное имя файла, с которого было запущено приложение. Вместо имени файла, в заголовке окна можно указать любой другой текст: название приложения, например. Это делается с помощью функции SetConsoleTitle.

::SetConsoleTitle(_T(«Пример программы на C++»));

Далее рассмотрим проблему с выводом на консоль текста кириллицы. Практически каждому программисту когда-нибудь приходилось с этим сталкиваться.

По сложившейся традиции, для вывода текста на консоль в большинстве примеров на C++ используются функции стандартной библиотеки, такие как printf или puts, которые работают с текстом в кодировке OEM, что соответствует кодовой странице 866 для русского языка. То же самое происходит при использовании потока вывода cout. Но проблема в том, что большинство текстовых редакторов для Windows работают с текстом в кодировке ANSI, что для русского языка соответствует кодовой странице 1251.

Как решить эту проблему? Проще всего использовать функции, которые записывают текст непосредственно в буфер консоли, а не в стандартный поток. Для этого нужно в программный код включить заголовочный файл CONIO.H и, вместо функций printf и puts, вызывать аналогичные функции _cprintf и _cputs.

Так они выглядят в коде на Visual C++:

_cputts(_T(«Всем привет от меня!rn»)); _tcprintf(_T(«%srn»), _T(«Благодарю за внимание.»));

Несложно написать и собственную процедуру вывода текста на консоль с использованием системной функции WriteConsole. Вот пример такой процедуры:

BOOL PrintText(LPCTSTR szText) < static HANDLE hConsole = ::GetStdHandle(STD_OUTPUT_HANDLE); // DWORD dw(0); return ::WriteConsole(hConsole, szText, ::lstrlen(szText), >

А вот так она используется:

PrintText(_T(«Всем пока. rn»));

Как вы уже наверно заметили, для перевода строки необходимо указывать последовательность из двух символов: «rn», в отличие от стандартного потока, где указывается лишь один символ ‘n’. Но бывает и так, что нужно вывести текст именно через стандартный поток, чтобы его можно было перенаправить в текстовый файл или в другое консольное приложение. Для этого текст нужно перевести в другую кодировку с помощью функции CharToOem. Или использовать функцию WideCharToMultiByte с параметром CP_OEMCP, если ваш текст в кодировке UNICODE.

Читайте также:
Revinate что это за программа

Размер буфера консоли по умолчанию равен 80х300, т.е. 300 строк по 80 символов каждая. Задать буферу консоли другой размер можно при помощи функции SetConsoleScreenBufferSize.

Атрибутами текста консоли являются: цвет символов и цвет заднего фона. Код атрибута соответствует числовому значению в диапазоне от 0x00 до 0x7F. Так выглядит таблица с числовыми значениями атрибутов текста в шестнадцатеричном коде:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F

Функция SetConsoleTextAttribute задаёт выводимому тексту указанный атрибут. Для задания всему окну консоли указанных атрибутов применяется функция FillConsoleOutputAttribute.

Позиционирование текста (т.е. установка курсора на позицию с заданными координатами) производится с помощью функции SetConsoleCursorPosition.

Полный код моего примера в Visual C++ 2005 выглядит так:

#include «stdafx.h» #include BOOL PrintText(LPCTSTR szText); BOOL SetConsoleAttrib(WORD wAttrib); BOOL SetCurrentPos(SHORT x, SHORT y); BOOL SetConsoleSize(SHORT x, SHORT y); int _tmain(int argc, _TCHAR* argv[]) < ::SetConsoleTitle(_T(«Пример программы на C++»)); // SetConsoleSize(160, 80); SetConsoleAttrib(0x6F); // _cputts(_T(«Всем привет от меня!rn»)); _tcprintf(_T(«%srn»), _T(«Благодарю за внимание.»)); // SetCurrentPos(25, 10); PrintText(_T(«Всем пока. rn»)); // _gettch(); // ожидание нажатия клавиши. return 0; >static HANDLE _ConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE); BOOL SetConsoleAttrib(WORD wAttrib) < ::SetConsoleTextAttribute(_ConsoleOut, wAttrib); CONSOLE_SCREEN_BUFFER_INFO csbi = ; ::GetConsoleScreenBufferInfo(_ConsoleOut, DWORD dw(0); COORD cr = ; return ::FillConsoleOutputAttribute(_ConsoleOut, wAttrib, csbi.dwSize.X * csbi.dwSize.Y, cr, > BOOL PrintText(LPCTSTR szText) < DWORD dw(0); return ::WriteConsole(_ConsoleOut, szText, ::lstrlen(szText), >BOOL SetCurrentPos(SHORT x, SHORT y) < COORD pos = ; return ::SetConsoleCursorPosition(_ConsoleOut, pos); > BOOL SetConsoleSize(SHORT x, SHORT y) < COORD size = ; return ::SetConsoleScreenBufferSize(_ConsoleOut, size); >

Приведённый пример был создан в среде Visual C++ 2005 как проект Win32 Console Application.

В заключение хочу отметить, что возможности консольного интерфейса Windows отнюдь не исчерпываются теми функциями, которые были упомянуты в этой статье. Не было рассказано про получение и обработку сообщений от мыши, об использовании в консольных приложениях возможностей графического интерфейса Windows. Но об этом речь пойдёт в дальнейших публикациях.

Источник: codenet.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru