Windows, создание консольного приложения.

Общие вопросы программирования, алгоритмы и т.п.

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

Windows, создание консольного приложения.

Сообщение Seenkao » 12.02.2021 12:28:39

Уже много времени борюсь, но так не могу найти способ избавится от "заднего" окна при создании консольного приложения. Окна командной строки, за основным экраном. Это конечно не критично, но напрягает.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Windows, создание консольного приложения.

Сообщение sts » 12.02.2021 13:44:20

подозреваю вы сами создаете консоль в коде и выставили директиву компилятора создавать консольную прогу, вот лишнее окно и появляется
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Windows, создание консольного приложения.

Сообщение Seenkao » 12.02.2021 14:00:14

Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Windows, создание консольного приложения.

Сообщение sts » 12.02.2021 14:24:26

немного теории, речь правда о делфе, както задумал я прогу, давно это было, которая при запуске из консоли работает как консольная а из гуи как гуевая.
в винде нет понятия консольная программа
при запуске программы из консоли, эта самая консоль аттачится к проге, а если из гуя то нечему аттачится, а далее прога сама решает что делать - если есть консоль и хочет быть консольной - работает - если нет консоли - создает консоль, соответственно если не хочет быть консольной и есть консоль то прога ее освобождает (аттачится/если есть консоль/создает/освобождает - соответствующий винапи).

директива компилятора - создавать консольную прогу как раз и управляет какой вариант кода в компилить в прогу, но это в делфе, возможно в фреепаскале както можно более гибко регулировать это.

теперь по существу

Seenkao писал(а):Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.


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

Добавлено спустя 1 час 8 минут 43 секунды:
Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
{$apptype GUI}
uses
  windows;
begin
//  if AttachConsole(ATTACH_PARENT_PROCESS) = false then Assert(AllocConsole());
//  FreeConsole();
  AllocConsole();
  ReadLn;
end.


плохо что во фрипаскале такой код не работает, а в делфе работает.

Добавлено спустя 2 минуты 3 секунды:
самое забавное реализацию ReadLn не нашел в исходниках

Добавлено спустя 21 минуту 17 секунд:
вот это работает



Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
{$apptype GUI}
uses
  windows;
begin
  AllocConsole();
  IsConsole:= true;
  SysInitStdIO;
  ReadLn;
end.
                                   
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Windows, создание консольного приложения.

Сообщение Дож » 13.02.2021 06:36:42

Хорошо, но как тогда создать простое приложение без консоли?

Достаточно указать в программе {$APPTYPE GUI} вместо {$APPTYPE CONSOLE}.

в винде нет понятия консольная программа

Есть -- программа может быть консольной, может быть гуишной. Это то, что вы выбираете при помощи $APPTYPE, что в итоге меняет IMAGE_OPTIONAL_HEADER.Subsystem исполняемого файла.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Windows, создание консольного приложения.

Сообщение Seenkao » 13.02.2021 14:34:52

Благодарю!
Так же в Лазарусе можно сделать в "Параметры проекта" -> "Настройка и целевая платформа" поставить галочку "Графическое приложение Win32(-WG)"
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Windows, создание консольного приложения.

Сообщение Alex2013 » 13.02.2021 18:03:38

Чуть строну то темы, но может пригодиться.
Открывает "временную " консоль из GUI приложения
(Тут уже ответили похожим образом но это все-же чуть "другая история" открыли написали и спросили что нужно и закрыли обратно ).
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
AllocConsole;
   try
    IsConsole := True;
    SysInitStdIO;
      Writeln(UTF8ToConsole('123 нажмите ентер'));
      Readln;
   finally
    FreeConsole;
   end;
end;


Тоже самое но хитрее ... (Запускает командную консоль (или консольное приложение) прямо ВНУТРИ окна GUI приложения )

Запуск стороннего приложения на форме своего приложения
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows, создание консольного приложения.

Сообщение Seenkao » 13.02.2021 21:44:32

Alex2013, увы, не подходит. Если надо я и сам смогу создать дополнительное консольное окно. ))) Меня больше волновало то окно, которое создавал не я.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Windows, создание консольного приложения.

Сообщение Alex2013 » 14.02.2021 08:10:54

Если напрягает окно вообще и хочется сделать ""программу-ниндзя" то можно сделать "сервис" (он же "демон" он же "служба")
http://www.freepascal.ru/article/lazarus/20090403120204
Инсталлировать его не обязательно он вполне запускается как обычное приложение.
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows, создание консольного приложения.

Сообщение Сквозняк » 15.02.2021 02:04:02

Консоль же можно свернуть и пусть в неё что-то пишется. При этом свернутся все консоли, но они не пропадут, вручную их можно развернуть. А вот прибивание консоли нужно тестить на других приложениях, не прибьёт-ли консоли и у них.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Windows, создание консольного приложения.

Сообщение Seenkao » 15.02.2021 02:18:05

Сквозняк, большинство пользователей, будет напрягать какое-то непонятно окно, которое вдруг появляется ни с того ни с сего. И при закрытии этого окна, вдруг закрывается программа...
Не хочешь объяснить это неопытному пользователю?

Данный вопрос, думаю интересует многих. Нужна отладка - делай окно, делай логирование. И проверяй.

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

Всё что нужно тебе - не значит нужно всем :)
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12


Вернуться в Общее

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

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

Рейтинг@Mail.ru