Страница 1 из 1

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

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

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

СообщениеДобавлено: 12.02.2021 13:44:20
sts
подозреваю вы сами создаете консоль в коде и выставили директиву компилятора создавать консольную прогу, вот лишнее окно и появляется

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

СообщениеДобавлено: 12.02.2021 14:00:14
Seenkao
Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.

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

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

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

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

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.
                                   

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

СообщениеДобавлено: 13.02.2021 06:36:42
Дож
Хорошо, но как тогда создать простое приложение без консоли?

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

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

Есть -- программа может быть консольной, может быть гуишной. Это то, что вы выбираете при помощи $APPTYPE, что в итоге меняет IMAGE_OPTIONAL_HEADER.Subsystem исполняемого файла.

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

СообщениеДобавлено: 13.02.2021 14:34:52
Seenkao
Благодарю!
Так же в Лазарусе можно сделать в "Параметры проекта" -> "Настройка и целевая платформа" поставить галочку "Графическое приложение Win32(-WG)"

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

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


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

Запуск стороннего приложения на форме своего приложения

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

СообщениеДобавлено: 13.02.2021 21:44:32
Seenkao
Alex2013, увы, не подходит. Если надо я и сам смогу создать дополнительное консольное окно. ))) Меня больше волновало то окно, которое создавал не я.

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

СообщениеДобавлено: 14.02.2021 08:10:54
Alex2013
Если напрягает окно вообще и хочется сделать ""программу-ниндзя" то можно сделать "сервис" (он же "демон" он же "служба")
http://www.freepascal.ru/article/lazarus/20090403120204
Инсталлировать его не обязательно он вполне запускается как обычное приложение.

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

СообщениеДобавлено: 15.02.2021 02:04:02
Сквозняк
Консоль же можно свернуть и пусть в неё что-то пишется. При этом свернутся все консоли, но они не пропадут, вручную их можно развернуть. А вот прибивание консоли нужно тестить на других приложениях, не прибьёт-ли консоли и у них.

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

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

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

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

Всё что нужно тебе - не значит нужно всем :)