Вы не можете, но вы можете подделать это поведение.
Каждое PE приложение содержит поле в своём заголовке, которое определяет, для какой подсистемы было сделано это приложение. Вы можете сказать там
IMAGE_SUBSYSTEM_WINDOWS_GUI
, чтобы указать что вы - GUI приложение. Или вы можете пометить себя IMAGE_SUBSYSTEM_WINDOWS_CUI
, говоря что вы - консольное приложение. Если вы - GUI программа, то вы запускаетесь без консоли.Подсистема определяет, как ядро должно подготавливать рабочее окружение для программы. Если программа отмечена как консольная, то ядро соединит консоль программы с консолью родителя (вызывающего) или создаст новую консоль, если у родителя консоли нет (это не полное описание, но детали здесь не важны). С другой стороны, если программа помечена как GUI, то ядро запустит программу вообще без консоли.
Есть люди, которым хочется написать то, что я называю "оппортунистической консольной программой". Такие программы будут использовать консоль, если она доступна у родителя, но они не хотят иметь консоль, если её не было у родителя. Ядро не поддерживает такой тип программ, но это не остановливает людей от придумывания хитрых обходных путей. Заметьте, что если бы такой тип программ существовал бы, то он создал бы проблемы с такими программами как cmd.exe и Проводник, которые меняют своё поведение в зависимости от типа подсистемы программы. Пришлось бы модифицировать эти программы, которым теперь надо понимать новый тип программ: "обе системы".
Я также видел запросы о том, что я называю "динамическая консольная программа". Это программы, которые сами решают во время выполнения, нужна им консоль или нет. К примеру, программа может захотеть быть консольной только если указаны какие-то параметры командной строки. Чтобы провернуть такой трюк ядру нужно иметь немалую силу телепатии: ему надо узнать, надо ли прикреплять к программе консоль или нет (что случается до момента, когда код программы получит управление), основываясь на том, что произойдёт в будущем (когда ваша программа наконец запустится, проанализирует аргументы командной строки и решит, хочет ли она работать как консольная или как GUI). И снова - люди придумали обходные пути.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.