Какие бывают консольные приложения
Текстовый интерфейс пользователя (англ. Text user interface, TUI ; также Character User Interface, CUI ) — система средств взаимодействия пользователя с компьютером, основанная на использовании текстового (буквенно-цифрового) режима дисплея или аналогичных устройств — например, командная строка. Приложения, использующие текстовый интерфейс, называют консольными программами.
Содержание
Другие решения
«Приложение win32» является родным приложением Windows GUI.
«Консольное приложение» — это нативное приложение без графического интерфейса.
Я не совсем понимаю, что именно вы подразумеваете под «преобразованием» одного типа приложения в другое. Но. Если вы говорите об использовании какой-то IDE и конвертируете проект в другой: ДА, это возможно. Главное отличие — это .DLL, с которыми вы связали свое приложение. Например, вы можете настроить проект, открытый как «консоль», чтобы он вел себя как «win32». Это не очень легко, но остается возможным. Нет, если вы хотите узнать, можно ли преобразовать установленное вами существующее приложение: НЕТ.
Особенности текстового интерфейса
На программном уровне для ввода и вывода информации консольные программы используют стандартные устройства ввода-вывода (stdin, stdout, stderr), хотя могут открывать и другие файлы, сетевые соединения и совершать иные действия, доступные в выполняющей их среде. Вывод печатных символов в stdout и stderr приводит к появлению этих символов на устройстве вывода, то есть к их получению пользователем.
В простейшем случае консольная программа использует интерфейс командной строки, однако многие из таких программ с помощью управляющих последовательностей терминалов создают более дружественный интерфейс, приближающийся к графическому (см.: меню (информатика)).
Некоторые консольные программы пригодны лишь для определённой реализации текстового интерфейса, например, текстовые программы операционных систем, особенно библиотека
Решение
Win32 обычно относится к 32-битному Windows API. Тем не менее _WIN32 макрос определен как для 32-битного, так и для 64-битного программирования. Как тип проекта Visual Studio, он включает в себя программы уровня API с графическим интерфейсом и консольной подсистемой.
Подсистема Windows небольшое целочисленное значение в заголовке исполняемого файла, которое сообщает Windows, какие сервисы нужны этой программе. Это значение может быть проверено, например, с помощью от Microsoft dumpbin программа, например dumpbin c:windows
otepad.exe /headers | find "ubs" , В Windows 9x dumpbin вывод был доступен через функцию предварительного просмотра файла, но эта функция была прекращена.
Каждый процесс в Windows может быть связан с одним и не более чем одним консольным окном.
GUI подсистема означает, что Windows будет НЕ попытайтесь оборудовать каждый экземпляр соответствующим консольным окном. Однако процесс может создать само окно консоли. Обычно эта подсистема используется для обычных программ с графическим пользовательским интерфейсом (следовательно, «GUI»), а для большинства компоновщиков она указывается как «окна».
Консольная подсистема означает, что Windows будет пытаться оснастить каждый экземпляр соответствующим консольным окном, создавая новое при необходимости.
Обратите внимание, что
Тот же самый исходный код может быть собран как консоль или подсистема GUI. И это очень легко сделать. Просто измените спецификацию подсистемы.
Исполняемый файл подсистемы GUI имеет стандартные потоки, как и исполняемый файл консольной подсистемы.
Исполняемый файл консольной подсистемы может представлять графический интерфейс пользователя, так же как и графический интерфейс.
Также обратите внимание, что
Нет такой проблемы с инструментами GNU, то есть g ++.
Реализация текстового интерфейса
В принципе, консольная программа не обязана заботиться о реализации самого взаимодействия с пользователем, ограничиваясь вводом-выводом на стандартные устройства, использованием библиотек типа программных интерфейсов. Собственно взаимодействие с пользователем обычно осуществляет операционная система или иное программное обеспечение.
Классической реализацией текстового интерфейса, восходящей к первой половине XX века, является алфавитно-цифровое устройство ввода-вывода, например, комплект из клавиатуры и АЦПУ (телетайпа). Впоследствии вместо АЦПУ стали применять мониторы, снабжённые знакогенератором, что позволило быстро и удобно организовывать диалог с пользователем. Подобными устройствами снабжён или может быть снабжён почти каждый современный компьютер. Такие комплекты из монитора и клавиатуры (иногда с добавлением мыши) называются консолью компьютера.
В соответствии с традицией использования консольными программами клавиатуры и АЦПУ для ввода и вывода соответственно взаимодействие таких программ с пользователем свелось к чтению из stdin и выводу на stdout. Таким образом, появилась возможность перенаправлять потоки ввода-вывода, осуществляя взаимодействие с пользователем посредством иных устройств, в том числе подключенных через сеть, а также при помощи специальных программ-эмуляторов терминала, например, рисующих окно с текстом в графическом интерфейсе пользователя (текстовое окно).
В 1970-х годы и позднее выпускались даже специальные устройства, реализующие текстовый интерфейс — текстовые терминалы, подключаемые через последовательный порт к компьютеру напрямую или через модем. С распространением персональных компьютеров функции текстового терминала, как правило, выполняет компьютер, тот, на котором выполняется консольная программа, или другой. Программы ssh (а также Интернет или локальную сеть. Программы konsole и многие другие реализуют текстовый интерфейс посредством текстового окна в среде X Window System.
Альтернативный подход к консольному выводу был использован в персональных компьютерах, в частности (хотя не только), IBM PC под управлением памяти, связанной со знакогенератором монитора, приводя к немедленному изменению видимых на мониторе данных. Такие программы могут также работать в среде Microsoft Windows. Более того, Windows имеет поддержку текстовых окон, во многом превосходящую имевшуюся в DOS, в том числе и для приложений собственно Windows.
Прежде чем создавать свои компьютерные программы, вы должны знать, какие они бывают и для чего предназначены. Видов программ не так много. Различия между программами можно назвать условными, так как по сути любая программа - это двоичный файл. Но мы так глубоко копать пока не будем, и поговорим о том, чем отличаются программы друг от друга с точки зрения пользователя.
Мы уже знаем, какие программы можно создавать в Lazarus. Но сегодня мы будем классифицировать программы с несколько иной точки зрения. Ниже перечислены основные виды программ с краткими описаниями.
Консольные приложения
Консольное приложение - это программа, которая работает с командной строкой. То есть это обычное окно, где пользователь может ввести какую-то команду и получить результат. Здесь нет никаких кнопочек и прочих прелестей Windows.
Примеры работы с командной строкой см. в статье Кое что о ДОС.
Оконные приложения
Оконное приложение - это привычная всем программа Windows. То есть это окошко с разными кнопочками и полями для ввода-вывода данных. На сегодняшний день это, пожалуй, самый распространённый вид программ. Именно оконные приложения создают большинство программистов.
Драйверы
Драйвер - это программа, которая обычно служит для “стыковки” компьютерного железа (например, видеокарты) с операционной системой или другой программой. Иногда драйвером называют программу, которая “стыкует” две других программы между собой. Хотя сейчас такие программы принято называть интерфейсами (например, COM-интерфейс или DDE-интерфейс).
Когда я говорю “стыкует”, то я имею ввиду, что драйвер позволяет организовать правильный обмен данными между компьютерным железом и ОС. То есть операционная система обращается не напрямую к железу, а через драйвер.
Зачем так сделано? Дело в том, что производителей, например, видеокарт, существует огромное количество. И все они делают их по своим внутренним стандартам. И операционная система не может знать всё обо всех видеокартах. Поэтому есть определённые общепринятые стандарты, которые поддерживаются операционной системой. И производитель “железа” делает какую угодно “железяку”, а затем просто пишет программу-драйвер, которая соответствует общепринятым стандартам и “стыкует” эту “железяку” с операционной системой.
Это позволяет извращённым умам делать разные смешные штуки. Например, можно написать “кривой” драйвер, который будет определять USB-мышку как флэшку. Конечно, работать такая “флэшка” не будет, но зато будет прикольно)))
Интерфейсы
Интерфейс - это программа, которая обычно служит для “стыковки” одной программы с другой. Например, вы хотите получить данные из чужой программы. Как это сделать? Если чужая программа поддерживает какой-нибудь стандартный интерфейс (например, DDE), то вы можете использовать этот интерфейс для получения данных из чужой программы.
Библиотеки
Библиотека - это двоичный файл, который хранит разные методы и объекты. Пока это вам ни о чём не говорит. Но просто знайте, что свои процедуры вы можете сохранить в библиотеку, а затем использовать её в других своих программах. Также вы можете использовать в своих программах чужие библиотеки и наоборот - распространять свои библиотеки, чтобы другие программисты могли их использовать в своих программах.
Удобство использования библиотек заключается в том, что они не привязаны к языку программирования. Например, вы можете написать библиотеку на языке С++, а использовать её потом в программах, которые пишите на Паскале.
Резидентные программы
Резидентная программа - это программа, которая работает в фоновом режиме (то есть не видна пользователю и пользователь может о ней даже не подозревать). В фоновом режиме работают, например, антивирусы (и вирусы тоже))).
Системные программы
В общем-то это обычные программы, которые могут быть как консольными, так и оконными приложениями. Сюда же я бы отнёс резидентные программы, библиотеки и драйверы. Пожалуй, это будет не совсем правильно. Однако эта статья для начинающих. Поэтому я не хочу перегружать читателей информацией, которую они пока плохо понимают. Давайте пока будем думать, что это куча разных вспомогательных программ, которые необходимы для нормальной работы системы и оборудования.
Пока на этом всё. Домашнего задания не будет. Просто подумайте о том, как огромен мир программирования, и сколько всего вам надо будет ещё изучить)))
Каждый второй опытный пользователь, услышав от новичка фразу "А что такое консольная программа?", начинает скрежетать зубами. Поэтому если вы - новичок, то лучше прочитать эту статью, чтобы не напороться на этого второго из двух опытных, а если вы уже опытный пользователь, то имеет смысл подсунуть заметку новичку, чтобы тот нашёл ответ на свой вопрос.
Итак, что же скрывается за этим страшным словосочетанием - консольное приложение? Приложение, как вы знаете, это в мире Windows не то, что к чему-то прикладывается, а компьютерная программа. Word, Excel, пасьянс "Косынка" и Internet Explorer - это всё приложения. Приложения бывают разными. Не только в том смысле, что Word отличается от "Блокнота", но и по принципу организации своего пользовательского интерфейса. Интерфейс - это внешний вид программы, и в Windows он бывает двух типов. Первый - это графический, второй - текстовый. Графический интерфейс система подсовывает вам под нос ежедневно. Все программы, имеющие красивые разноцветные окна, имеют и графический интерфейс. Даже Word и "Блокнот", хоть и работают с текстом, но интерфейс имеют графический. Где же тогда в наши дни можно увидеть программу, работающую в режиме текстового интерфейса?
Дело в том, что ещё не так давно, около двадцати лет назад, мощности компьютеров, стоящих у пользователей дома и на работе, не хватало на отображение даже такой несложной графики, как окна (что и говорить о трёхмерных видеоиграх!). Поэтому компьютеру и пользователям приходилось общаться с помощью текста. Пользователь вводил специальные команды - например, команда dir в первой из систем производства Microsoft, DOS, позволяла просмотреть список файлов и папок в определённой директории, а команда ver показывала версию операционной системы, с которой работал пользователь. Программы, которые запускал пользователь, тоже, естественно, работали в текстовом режиме.
Командная строка, как вы видите, сохранилась в Windows до сих пор. Команды, которые можно выполнить из неё, подробно описаны в справке Windows. А приложения, которые выполняются в текстовом режиме, теперь называются консольными.
Почему же командная строка продолжает жить, несмотря на свой почтенный возраст? Во-первых, есть множество программ, которым не нужен графический интерфейс - например, программы по взлому паролей, которые просто подбирают комбинации символов, пока то, что закрыто паролем, не откроется. Кроме того, командная строка приходит на помощь тем пользователям, которые выучили назубок её команды и быстро набирают с клавиатуры, - для них она гораздо более быстрый способ работать с компьютером, чем графический интерфейс.
Консольных программ масса, и они используются часто для того, чтобы упростить рутинные действия пользователя. Дело в том, что с ними можно обращаться точно так же, как и с обычными командами. А те, в свою очередь, можно записать в специальный текстовый файл с расширением BAT или CMD (такой файл называется командным), и их можно потом выполнить все залпом как обычную программу - достаточно в "Проводнике" дважды кликнуть по этому файлу мышью.
Так что когда вам в следующий раз посоветуют воспользоваться консольной программой, просто наберите её название в строке "Пуск" -> "Выполнить", не забыв, конечно, и полный путь к ней (например, c:\Downloads\Rar.exe). Если вам предложат указать для неё аргументы, то тоже не надо пугаться. Например, если для программы a нужно передать аргумент b, то в командной строке надо записать "a b", то есть аргументы пишутся через пробел.
Думаю, для начала знакомства с консольными приложениями этой информации вам вполне хватит. А если нет, пишите мне по адресу dreamdrusch@tut.by, будет продолжение.
На этом шаге мы рассмотрим понятие консольного приложения и приведем пример такого приложения .
Консольное приложение — это программа, которая для взаимодействия с пользователем использует консоль — клавиатуру и монитор, работающий в режиме отображения символьной информации (буквы, цифры и специальные знаки).
В операционной системе консольное приложение работает в окне командной строки (рисунок 1), которое часто называют окном консоли .
Рис.1. Консольное приложение
- при помощи функций printf ( вывод ) и scanf ( ввод ) ;
- вывести информацию в поток вывода (cout) , прочитать данные из потока ввода (cin) ;
- при помощи методов WriteLine и ReadLine объекта Console.
Метод | Описание |
---|---|
Console::Write(st) | Выводит на экран (в окно консоли) строку st |
Console::WriteLine(st) | Выводит на экран (в окно консоли) строку st , после чего переводит курсор в начало следующей строки |
Console::ReadLine() | Значением метода ReadLine является строка, набранная пользователем на клавиатуре. Для преобразования строки в число надо использовать, например, методы System::ToInt32() или System::ToSingle() |
Console::Read() | Значением метода Read является код символа, набранного на клавиатуре |
Метод Console::Write выводит на экран (в окно консоли) строку, указанную в качестве параметра метода.
Если надо вывести значение числовой переменной, то для преобразования числа в строку следует использовать метод ToString . Вид (формат) строки, возвращаемой методом ToString , определяет параметр, указанный в инструкции вызова метода (таблица 2).
Параметр | Формат | Пример |
---|---|---|
"c", "C" | Currency — финансовый (денежный) . Используется для представления денежных величин. Обозначение денежной единицы, разделитель групп разрядов, способ отображения отрицательных чисел определяют соответствующие настройки операционной системы | 5 5055,28р. |
"e", "E" | Scientific (exponential) — научный . Используется для представления очень маленьких или очень больших чисел. Разделитель целой и дробной частей числа задается в настройках операционной системы | 5,505528+E04 |
"f", "F" | Fixed — число с фиксированной точкой . Используется для представления дробных чисел. Количество цифр дробной части, способ отображения отрицательных чисел определяют соответствующие настройки операционной системы | 55055,28 |
"g", "G" | General — универсальный формат . Похож на Number , но разряды не разделены на группы | 55055,28 |
"n", "N" | Number — числовой . Используется для представления дробных чисел. Количество цифр дробной части, символразделитель групп разрядов, способ отображения отрицательных чисел определяют соответствующие настройки операционной системы | 5 5055,28 |
"r", "R" | Roundtrip — без округления . В отличие от формата Number , этот формат не выполняет округления (количество цифр дробной части зависит от значения числа) | 55055,2755 |
Следует обратить внимание, что символ-разделитель целой и дробной частей числа задает операционная система. Этот же символ надо использовать и при вводе дробных чисел.
После выполнения инструкции Write курсор остается в той позиции экрана, в которую он переместился после вывода последнего символа строки. Следующая инструкция Write начинает вывод с той позиции экрана, в которой находится курсор.
Метод WriteLine отличается от метода Write тем, что после вывода строки курсор автоматически переходит в начало следующей строки.
Параметр метода WriteLine можно не указывать. В этом случае курсор будет переведен в начало следующей строки.
Метод ReadLine объекта Console обеспечивает ввод с клавиатуры строки символов. Для преобразования введенной строки в данные необходимо использовать соответствующие методы преобразования: System::ToInt16() , System::ToInt32() , System::ToSingle() , System::ToDouble() и т. д.
Следует обратить внимание на то, что в процессе преобразования строки в число возможны ошибки (исключения), например, из-за того, что при вводе дробного числа пользователь введет точку вместо запятой ("правильным" символом, при стандартной для России настройке операционной системы, является запятая).
В качестве примера использования методов объекта Console приведем программу пересчета цены из долларов в рубли.
Какие отличия между Windows и консольными приложениями?
При создании нового проекта в Visual С++ он просит выбрать один из указанных выше.
Единственное отличие заключается в том, что консольное приложение всегда создает консоль, если она не запускается с одного (или консоль активно отключается при запуске). С другой стороны, приложение Windows не создает консоль. Он все равно может прикрепляться к существующей консоли или создавать новый с помощью AllocConsole .
Это делает приложения Windows лучше подходящими для приложений GUI или фоновых приложений, потому что вы обычно не хотите, чтобы для них создано окно терминала.
В более техническом примечании единственная разница между консолью и исполняемым файлом Windows – один байт в PE-заголовке файла exe . Переключение этого байта вручную (например, с использованием шестнадцатеричного редактора) преобразует тип приложения. Это хорошо опубликованный хак, который используется для создания консольных приложений в VB6 (где этот тип приложений явно не поддерживается).
Чтобы определить и изменить тип подсистемы приложения, вам необходимо прочитать части заголовка PE. Адрес данных подсистемы не исправлен, поскольку он является частью дополнительного заголовка файла, позиция которого определяется адресом, хранящимся в заголовке файла DOS (в элементе e_lfanew ). Этот адрес фактически указывает на запись _IMAGE_NT_HEADERS , которая, в свою очередь, включает структуру IMAGE_OPTIONAL_HEADER32 . У этого есть член int16 1) называемый Subsystem . Значение члена равно 2 для приложения Windows и 3 для консольного приложения. Существуют и другие подсистемы (в частности, POSIX и ядро). Я написал небольшое приложение VB6 для изменения подсистемы приложения, которое можно загрузить из ActiveVB в качестве исходного кода.
Формат PE не очень хорошо документирован, но этот документ может служить введением: Peering Inside PE: обзор формата исполняемого файла Win32 Portable.
1) Это не противоречит моему утверждению, что только один байт отличается: самый старший байт этого элемента всегда равен 0. Изменяется только младший значащий байт.
| Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее. |
Прежде чем создавать свои компьютерные программы, вы должны знать, какие они бывают и для чего предназначены. Видов программ не так много. Различия между программами можно назвать условными, так как по сути любая программа – это двоичный файл. Но мы так глубоко копать пока не будем, и поговорим о том, чем отличаются программы друг от друга с точки зрения пользователя.
Мы уже знаем, какие программы можно создавать в Lazarus. Но сегодня мы будем классифицировать программы с несколько иной точки зрения. Ниже перечислены основные виды программ с краткими описаниями.
Консольные приложения
Консольное приложение – это программа, которая работает с командной строкой. То есть это обычное окно, где пользователь может ввести какую-то команду и получить результат. Здесь нет никаких кнопочек и прочих прелестей Windows.
Примеры работы с командной строкой см. в статье Кое что о ДОС.
Оконные приложения
Оконное приложение – это привычная всем программа Windows. То есть это окошко с разными кнопочками и полями для ввода-вывода данных. На сегодняшний день это, пожалуй, самый распространённый вид программ. Именно оконные приложения создают большинство программистов.
Драйверы
Драйвер – это программа, которая обычно служит для “стыковки” компьютерного железа (например, видеокарты) с операционной системой или другой программой. Иногда драйвером называют программу, которая “стыкует” две других программы между собой. Хотя сейчас такие программы принято называть интерфейсами (например, COM-интерфейс или DDE-интерфейс).
Когда я говорю “стыкует”, то я имею ввиду, что драйвер позволяет организовать правильный обмен данными между компьютерным железом и ОС. То есть операционная система обращается не напрямую к железу, а через драйвер.
Зачем так сделано? Дело в том, что производителей, например, видеокарт, существует огромное количество. И все они делают их по своим внутренним стандартам. И операционная система не может знать всё обо всех видеокартах. Поэтому есть определённые общепринятые стандарты, которые поддерживаются операционной системой. И производитель “железа” делает какую угодно “железяку”, а затем просто пишет программу-драйвер, которая соответствует общепринятым стандартам и “стыкует” эту “железяку” с операционной системой.
Это позволяет извращённым умам делать разные смешные штуки. Например, можно написать “кривой” драйвер, который будет определять USB-мышку как флэшку. Конечно, работать такая “флэшка” не будет, но зато будет прикольно)))
Интерфейсы
Интерфейс – это программа, которая обычно служит для “стыковки” одной программы с другой. Например, вы хотите получить данные из чужой программы. Как это сделать? Если чужая программа поддерживает какой-нибудь стандартный интерфейс (например, DDE), то вы можете использовать этот интерфейс для получения данных из чужой программы.
Библиотеки
Библиотека – это двоичный файл, который хранит разные методы и объекты. Пока это вам ни о чём не говорит. Но просто знайте, что свои процедуры вы можете сохранить в библиотеку, а затем использовать её в других своих программах. Также вы можете использовать в своих программах чужие библиотеки и наоборот – распространять свои библиотеки, чтобы другие программисты могли их использовать в своих программах.
Удобство использования библиотек заключается в том, что они не привязаны к языку программирования. Например, вы можете написать библиотеку на языке С++, а использовать её потом в программах, которые пишите на Паскале.
Резидентные программы
Резидентная программа – это программа, которая работает в фоновом режиме (то есть не видна пользователю и пользователь может о ней даже не подозревать). В фоновом режиме работают, например, антивирусы (и вирусы тоже))).
Системные программы
В общем-то это обычные программы, которые могут быть как консольными, так и оконными приложениями. Сюда же я бы отнёс резидентные программы, библиотеки и драйверы. Пожалуй, это будет не совсем правильно. Однако эта статья для начинающих. Поэтому я не хочу перегружать читателей информацией, которую они пока плохо понимают. Давайте пока будем думать, что это куча разных вспомогательных программ, которые необходимы для нормальной работы системы и оборудования.
Пока на этом всё. Домашнего задания не будет. Просто подумайте о том, как огромен мир программирования, и сколько всего вам надо будет ещё изучить)))
Я хочу знать, в чем разница между приложением Windows Form, Win32Application и консолью. Я знаю, что приложение Windows Form и приложение Win32 являются графическим инструментом, но я хочу знать, когда использовать одно приложение над другим, и могу ли я преобразовать консольное приложение для окна формы приложения?
Читайте также: