как определить консоль или гуи?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

как определить консоль или гуи?

Сообщение VirtUX » 29.02.2020 15:30:45

С помощью какой директивы можно определить для какого приложения компилируется код: консольного или графического?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: как определить консоль или гуи?

Сообщение Mirage » 01.03.2020 05:05:08

system.isConsole()
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: как определить консоль или гуи?

Сообщение iskander » 01.03.2020 10:35:02

Кажется, в линухе system.isConsole вернёт True в любом случае. Или нет?
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: как определить консоль или гуи?

Сообщение Cheb » 01.03.2020 11:36:31

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

Кстати, вопрос: что вернёт isConsole, если виндовое приложение запустить из консоли командой?
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: как определить консоль или гуи?

Сообщение Vadim » 01.03.2020 12:12:34

IsConsole - это не функция, а системная (в пределах FPC) переменная. Прикол в том, что во всех (почти ;-) ) ОСях в коде инициализации SYSTEM она выставляется в True, а вот в винде - нет. Догадайтесь - почему... :D

Добавлено спустя 2 минуты 53 секунды:
Cheb писал(а):Кстати, вопрос: что вернёт isConsole, если виндовое приложение запустить из консоли командой?

Тоже, что и в случае неИЗконсоли... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как определить консоль или гуи?

Сообщение iskander » 01.03.2020 13:05:23

Cheb писал(а):Как я понимаю, эта функция нужна, чтобы определить, можно использовать WriteLn или первый же вызов хряпнется.

Так и я о том же. Может вот так попробовать
Код: Выделить всё
{$if defined(console) and not defined(lcl)}
  //considered console
{$else}
  //considered gui
{$endif}
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: как определить консоль или гуи?

Сообщение Mirage » 01.03.2020 14:15:13

Когда запускаю под виндой с {$apptype console}, isConsole отдает true.
В документации так и описано, только что не функция, да:
https://www.freepascal.org/docs-html/prog/progsu86.html
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: как определить консоль или гуи?

Сообщение Alex2013 » 01.03.2020 17:28:21

Хм но интересно, а можно ли сделать именно функцию для определения факта запуска программы из консоли.
Кстати, а почему нельзя тупо сделать что-то вроде этого? :roll:
Код: Выделить всё
function TestConsole:Boolean;
begin
TestConsole:=True;
try
Writeln('');
except
  TestConsole:=False;
end
end;
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: как определить консоль или гуи?

Сообщение Снег Север » 02.03.2020 08:20:01

Сколько у линуксойдов проблем от невежества в основах винды... :D
В винде писать в консоль - моветон, которым грешат либо портированные программы, либо наследники тёмного прошлого, оставленные для совместимости. Нормальный правильный подход - писать "выхлоп" в файл, если уж свербит в одном месте клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: как определить консоль или гуи?

Сообщение VirtUX » 02.03.2020 13:14:28

iskander писал(а):Может вот так попробовать
Код: Выделить всё
{$if defined(console) and not defined(lcl)}
  //considered console
{$else}
  //considered gui
{$endif}

Спасибо! То, что нужно!

Снег Север писал(а):клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).

Всё серверное ПО "клепается" без GUI. Так как на сервере не бывает GUI (разве что у "моветонного" сервера )))). Да и для серверного ПО этот самый GUI - не нужен ;)

Добавлено спустя 2 минуты 25 секунд:
Определять на стадии компиляции мне нужно потому, что одни и теже модули можно использовать как для консольного, так и для гуювого. Но некоторые блоки кода не нужны, да и не возможно, использовать в консоли.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: как определить консоль или гуи?

Сообщение Снег Север » 02.03.2020 15:57:27

VirtUX писал(а):Так как на сервере не бывает GUI

Для меня "сервер" - это windows server и там всегда есть GUI. Линуксовские недоразумения меня, к счастью, не интересуют от слова "совсем".
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: как определить консоль или гуи?

Сообщение Alex2013 » 02.03.2020 16:09:27

Снег Север писал(а):Сколько у линуксойдов проблем от невежества в основах винды... :D
В винде писать в консоль - моветон, которым грешат либо портированные программы, либо наследники тёмного прошлого, оставленные для совместимости. Нормальный правильный подход - писать "выхлоп" в файл, если уж свербит в одном месте клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).


Отчасти согласен "обычные пользователи" (Причем у некоторых стаж работы по 20 и более лет ) увидев скриншот консоли спрашивают "Что это за "черное меню"?" вызвая у Линуксойдов и "поколения заставшего Дос" не слабый когнитивный дисонанс.

Но в тоже время есть ведь поделки в "стиле FAR" и они весьма популярны.(То есть программы с минималистическим интерфейсом, где не особо понятно что там, "текстовый режим" консоли или "графический GUI без графики".)
В принципе особой разницы там уже нет, однако и нативно "консольный интерфейс" все еще в ходу.

И вот для этого класса программ возможность определения среды запуска по идее может быть как-то полезно .
Последний раз редактировалось Alex2013 13.02.2021 17:44:03, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: как определить консоль или гуи?

Сообщение VirtUX » 04.03.2020 14:35:49

Снег Север
Не хочу Вас расстраивать, но считаю необходимым Вас предупредить...
Уж не помню с какой версии, но Windows server можно устанавливать без GUI. И всё серверное ПО не имеет GUI даже под Windows. Любой современный Windows server имеет возможность управления через web-морду.
В принципе, за почти 20 лет работы с серверами, я не помню такого ПО (за исключением парочки приложений, которым серверная ОС и не нужна вовсе, но они считались серверными), которое надо было бы запускать в графическом окружении некоторого пользователя, и оставлять открытым окно приложения на весь период работы. Любой Windows server, после старта, работает без надобности в GUI. Инициализация всех его компонентов завершается на стадии до регистрации администратора в системе. Всё - сервер уже работает! И входить администратору в GUI - нет никакой необходимости)
Возможно я в каких-то мелочах и ошибаюсь, но даже на десктопах (Windows, Linux, Mac) - консоль часто необходима, для настройки некоторых "вещей". Если Вы консоль не используете - это не значит, что она не нужна никому. Здание без фундамента не может существовать ;)
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: как определить консоль или гуи?

Сообщение Снег Север » 04.03.2020 15:44:04

VirtUX, на Windows server входят, как правило, через RDP. И настраивают, и работают в GUI. Управление через web-морду - это какое-то извращение, кто им пользуется, мне неведомо.
На десктопах настройка не через GUI - редкие случаи, связанные, как правило, с нештатными проблемами.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru