Чем отличается консольное приложение от приложения windows

Какие отличия между 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. Изменяется только младший значащий байт.

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее.

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

Читайте также:  1С дополнительные реквизиты добавить программно

Мы уже знаем, какие программы можно создавать в Lazarus. Но сегодня мы будем классифицировать программы с несколько иной точки зрения. Ниже перечислены основные виды программ с краткими описаниями.

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

Консольное приложение – это программа, которая работает с командной строкой. То есть это обычное окно, где пользователь может ввести какую-то команду и получить результат. Здесь нет никаких кнопочек и прочих прелестей Windows.

Пример консольного приложения – это командный интерпретатор, который есть в любой операционной системе. В Windows 95/98/ME – это программа command.com (впрочем, он есть и в более поздних версиях Windows). В Windows 2000 и выше – это программа cmd.exe.

Примеры работы с командной строкой см. в статье Кое что о ДОС.

Оконные приложения

Оконное приложение – это привычная всем программа Windows. То есть это окошко с разными кнопочками и полями для ввода-вывода данных. На сегодняшний день это, пожалуй, самый распространённый вид программ. Именно оконные приложения создают большинство программистов.

Драйверы

Драйвер – это программа, которая обычно служит для “стыковки” компьютерного железа (например, видеокарты) с операционной системой или другой программой. Иногда драйвером называют программу, которая “стыкует” две других программы между собой. Хотя сейчас такие программы принято называть интерфейсами (например, COM-интерфейс или DDE-интерфейс).

Когда я говорю “стыкует”, то я имею ввиду, что драйвер позволяет организовать правильный обмен данными между компьютерным железом и ОС. То есть операционная система обращается не напрямую к железу, а через драйвер.

Зачем так сделано? Дело в том, что производителей, например, видеокарт, существует огромное количество. И все они делают их по своим внутренним стандартам. И операционная система не может знать всё обо всех видеокартах. Поэтому есть определённые общепринятые стандарты, которые поддерживаются операционной системой. И производитель “железа” делает какую угодно “железяку”, а затем просто пишет программу-драйвер, которая соответствует общепринятым стандартам и “стыкует” эту “железяку” с операционной системой.

Это позволяет извращённым умам делать разные смешные штуки. Например, можно написать “кривой” драйвер, который будет определять USB-мышку как флэшку. Конечно, работать такая “флэшка” не будет, но зато будет прикольно)))

Интерфейсы

Интерфейс – это программа, которая обычно служит для “стыковки” одной программы с другой. Например, вы хотите получить данные из чужой программы. Как это сделать? Если чужая программа поддерживает какой-нибудь стандартный интерфейс (например, DDE), то вы можете использовать этот интерфейс для получения данных из чужой программы.

Читайте также:  Этот хост неизвестен 1с line 1068

Библиотеки

Библиотека – это двоичный файл, который хранит разные методы и объекты. Пока это вам ни о чём не говорит. Но просто знайте, что свои процедуры вы можете сохранить в библиотеку, а затем использовать её в других своих программах. Также вы можете использовать в своих программах чужие библиотеки и наоборот – распространять свои библиотеки, чтобы другие программисты могли их использовать в своих программах.

Удобство использования библиотек заключается в том, что они не привязаны к языку программирования. Например, вы можете написать библиотеку на языке С++, а использовать её потом в программах, которые пишите на Паскале.

Резидентные программы

Резидентная программа – это программа, которая работает в фоновом режиме (то есть не видна пользователю и пользователь может о ней даже не подозревать). В фоновом режиме работают, например, антивирусы (и вирусы тоже))).

Системные программы

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

Пока на этом всё. Домашнего задания не будет. Просто подумайте о том, как огромен мир программирования, и сколько всего вам надо будет ещё изучить)))

Я хочу знать, в чем разница между приложением Windows Form, Win32Application и консолью. Я знаю, что приложение Windows Form и приложение Win32 являются графическим инструментом, но я хочу знать, когда использовать одно приложение над другим, и могу ли я преобразовать консольное приложение для окна формы приложения?

Решение

Форма Windows относится к .NET-приложению. Он основан не на собственном Windows API, а на инфраструктуре .NET. Который включает в себя виртуальную машину.

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 вывод был доступен через функцию предварительного просмотра файла, но эта функция была прекращена.

Читайте также:  Что можно сделать зная mac-адрес телефона?

Каждый процесс в Windows может быть связан с одним и не более чем одним консольным окном.

GUI подсистема означает, что Windows будет НЕ попытайтесь оборудовать каждый экземпляр соответствующим консольным окном. Однако процесс может создать само окно консоли. Обычно эта подсистема используется для обычных программ с графическим пользовательским интерфейсом (следовательно, «GUI»), а для большинства компоновщиков она указывается как «окна».

Консольная подсистема означает, что Windows будет пытаться оснастить каждый экземпляр соответствующим консольным окном, создавая новое при необходимости.

Обратите внимание, что

Тот же самый исходный код может быть собран как консоль или подсистема GUI. И это очень легко сделать. Просто измените спецификацию подсистемы.

Исполняемый файл подсистемы GUI имеет стандартные потоки, как и исполняемый файл консольной подсистемы.

Исполняемый файл консольной подсистемы может представлять графический интерфейс пользователя, так же как и графический интерфейс.

Также обратите внимание, что

  • Инструменты Microsoft по умолчанию не принимают стандарт C ++ main для сборки подсистемы GUI. Однако это несоответствующее поведение легко исправить. Просто укажите /entry:mainCRTStartup в настройках компоновщика.

Нет такой проблемы с инструментами GNU, то есть g ++.

Другие решения

  1. окна формы приложений являются приложениями, которые используют структуры графического интерфейса программирования, такие как .NET, DELPHI или MFC, вместо прямого вызова win32 API.
  2. С другой стороны, приложение win32 обычно имеет дело непосредственно с Windows API для создания приложений снизу вверх.
  3. А также консольные приложения нет графического интерфейса Для ввода данных и вывода результатов используется только окно командной строки.

«Приложение Windows Form» — это приложение с графическим интерфейсом .NET.

«Приложение win32» является родным приложением Windows GUI.

«Консольное приложение» — это нативное приложение без графического интерфейса.

Я не совсем понимаю, что именно вы подразумеваете под «преобразованием» одного типа приложения в другое. Но. Если вы говорите об использовании какой-то IDE и конвертируете проект в другой: ДА, это возможно. Главное отличие — это .DLL, с которыми вы связали свое приложение. Например, вы можете настроить проект, открытый как «консоль», чтобы он вел себя как «win32». Это не очень легко, но остается возможным. Нет, если вы хотите узнать, можно ли преобразовать установленное вами существующее приложение: НЕТ.

Оцените статью
Добавить комментарий

Adblock detector