как определить консоль или гуи?
Модератор: Модераторы
как определить консоль или гуи?
С помощью какой директивы можно определить для какого приложения компилируется код: консольного или графического?
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Re: как определить консоль или гуи?
system.isConsole()
Re: как определить консоль или гуи?
Кажется, в линухе system.isConsole вернёт True в любом случае. Или нет?
Re: как определить консоль или гуи?
Как я понимаю, эта функция нужна, чтобы определить, можно использовать WriteLn или первый же вызов хряпнется.
В линуксе таких проблем нет, WriteLn можно использовать всегда, любое приложение можно запустить из консоли.
Там просто нет чёткого разделения на оконные и консольные.
Кстати, вопрос: что вернёт isConsole, если виндовое приложение запустить из консоли командой?
В линуксе таких проблем нет, WriteLn можно использовать всегда, любое приложение можно запустить из консоли.
Там просто нет чёткого разделения на оконные и консольные.
Кстати, вопрос: что вернёт isConsole, если виндовое приложение запустить из консоли командой?
Re: как определить консоль или гуи?
IsConsole - это не функция, а системная (в пределах FPC) переменная. Прикол в том, что во всех (почти
) ОСях в коде инициализации SYSTEM она выставляется в True, а вот в винде - нет. Догадайтесь - почему... 
Добавлено спустя 2 минуты 53 секунды:
Тоже, что и в случае неИЗконсоли...
Добавлено спустя 2 минуты 53 секунды:
Cheb писал(а):Кстати, вопрос: что вернёт isConsole, если виндовое приложение запустить из консоли командой?
Тоже, что и в случае неИЗконсоли...
Re: как определить консоль или гуи?
Cheb писал(а):Как я понимаю, эта функция нужна, чтобы определить, можно использовать WriteLn или первый же вызов хряпнется.
Так и я о том же. Может вот так попробовать
Код: Выделить всё
{$if defined(console) and not defined(lcl)}
//considered console
{$else}
//considered gui
{$endif}
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Re: как определить консоль или гуи?
Когда запускаю под виндой с {$apptype console}, isConsole отдает true.
В документации так и описано, только что не функция, да:
https://www.freepascal.org/docs-html/prog/progsu86.html
В документации так и описано, только что не функция, да:
https://www.freepascal.org/docs-html/prog/progsu86.html
Re: как определить консоль или гуи?
Хм но интересно, а можно ли сделать именно функцию для определения факта запуска программы из консоли.
Кстати, а почему нельзя тупо сделать что-то вроде этого?
Кстати, а почему нельзя тупо сделать что-то вроде этого?
Код: Выделить всё
function TestConsole:Boolean;
begin
TestConsole:=True;
try
Writeln('');
except
TestConsole:=False;
end
end;- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: как определить консоль или гуи?
Сколько у линуксойдов проблем от невежества в основах винды... 
В винде писать в консоль - моветон, которым грешат либо портированные программы, либо наследники тёмного прошлого, оставленные для совместимости. Нормальный правильный подход - писать "выхлоп" в файл, если уж свербит в одном месте клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).
В винде писать в консоль - моветон, которым грешат либо портированные программы, либо наследники тёмного прошлого, оставленные для совместимости. Нормальный правильный подход - писать "выхлоп" в файл, если уж свербит в одном месте клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).
Re: как определить консоль или гуи?
iskander писал(а):Может вот так попробоватьКод: Выделить всё
{$if defined(console) and not defined(lcl)}
//considered console
{$else}
//considered gui
{$endif}
Спасибо! То, что нужно!
Снег Север писал(а):клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).
Всё серверное ПО "клепается" без GUI. Так как на сервере не бывает GUI (разве что у "моветонного" сервера )))). Да и для серверного ПО этот самый GUI - не нужен
Добавлено спустя 2 минуты 25 секунд:
Определять на стадии компиляции мне нужно потому, что одни и теже модули можно использовать как для консольного, так и для гуювого. Но некоторые блоки кода не нужны, да и не возможно, использовать в консоли.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: как определить консоль или гуи?
VirtUX писал(а):Так как на сервере не бывает GUI
Для меня "сервер" - это windows server и там всегда есть GUI. Линуксовские недоразумения меня, к счастью, не интересуют от слова "совсем".
Re: как определить консоль или гуи?
Снег Север писал(а):Сколько у линуксойдов проблем от невежества в основах винды...
В винде писать в консоль - моветон, которым грешат либо портированные программы, либо наследники тёмного прошлого, оставленные для совместимости. Нормальный правильный подход - писать "выхлоп" в файл, если уж свербит в одном месте клепать программу без оконного интерфейса (что тоже моветон в 21-м веке).
Отчасти согласен "обычные пользователи" (Причем у некоторых стаж работы по 20 и более лет ) увидев скриншот консоли спрашивают "Что это за "черное меню"?" вызвая у Линуксойдов и "поколения заставшего Дос" не слабый когнитивный дисонанс.
Но в тоже время есть ведь поделки в "стиле FAR" и они весьма популярны.(То есть программы с минималистическим интерфейсом, где не особо понятно что там, "текстовый режим" консоли или "графический GUI без графики".)
В принципе особой разницы там уже нет, однако и нативно "консольный интерфейс" все еще в ходу.
И вот для этого класса программ возможность определения среды запуска по идее может быть как-то полезно .
Последний раз редактировалось Alex2013 13.02.2021 16:44:03, всего редактировалось 2 раза.
Re: как определить консоль или гуи?
Снег Север
Не хочу Вас расстраивать, но считаю необходимым Вас предупредить...
Уж не помню с какой версии, но Windows server можно устанавливать без GUI. И всё серверное ПО не имеет GUI даже под Windows. Любой современный Windows server имеет возможность управления через web-морду.
В принципе, за почти 20 лет работы с серверами, я не помню такого ПО (за исключением парочки приложений, которым серверная ОС и не нужна вовсе, но они считались серверными), которое надо было бы запускать в графическом окружении некоторого пользователя, и оставлять открытым окно приложения на весь период работы. Любой Windows server, после старта, работает без надобности в GUI. Инициализация всех его компонентов завершается на стадии до регистрации администратора в системе. Всё - сервер уже работает! И входить администратору в GUI - нет никакой необходимости)
Возможно я в каких-то мелочах и ошибаюсь, но даже на десктопах (Windows, Linux, Mac) - консоль часто необходима, для настройки некоторых "вещей". Если Вы консоль не используете - это не значит, что она не нужна никому. Здание без фундамента не может существовать
Не хочу Вас расстраивать, но считаю необходимым Вас предупредить...
Уж не помню с какой версии, но Windows server можно устанавливать без GUI. И всё серверное ПО не имеет GUI даже под Windows. Любой современный Windows server имеет возможность управления через web-морду.
В принципе, за почти 20 лет работы с серверами, я не помню такого ПО (за исключением парочки приложений, которым серверная ОС и не нужна вовсе, но они считались серверными), которое надо было бы запускать в графическом окружении некоторого пользователя, и оставлять открытым окно приложения на весь период работы. Любой Windows server, после старта, работает без надобности в GUI. Инициализация всех его компонентов завершается на стадии до регистрации администратора в системе. Всё - сервер уже работает! И входить администратору в GUI - нет никакой необходимости)
Возможно я в каких-то мелочах и ошибаюсь, но даже на десктопах (Windows, Linux, Mac) - консоль часто необходима, для настройки некоторых "вещей". Если Вы консоль не используете - это не значит, что она не нужна никому. Здание без фундамента не может существовать
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Re: как определить консоль или гуи?
VirtUX, на Windows server входят, как правило, через RDP. И настраивают, и работают в GUI. Управление через web-морду - это какое-то извращение, кто им пользуется, мне неведомо.
На десктопах настройка не через GUI - редкие случаи, связанные, как правило, с нештатными проблемами.
На десктопах настройка не через GUI - редкие случаи, связанные, как правило, с нештатными проблемами.
