Windows, создание консольного приложения.
Модератор: Модераторы
Windows, создание консольного приложения.
Уже много времени борюсь, но так не могу найти способ избавится от "заднего" окна при создании консольного приложения. Окна командной строки, за основным экраном. Это конечно не критично, но напрягает.
Re: Windows, создание консольного приложения.
подозреваю вы сами создаете консоль в коде и выставили директиву компилятора создавать консольную прогу, вот лишнее окно и появляется
Re: Windows, создание консольного приложения.
Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.
Re: Windows, создание консольного приложения.
немного теории, речь правда о делфе, както задумал я прогу, давно это было, которая при запуске из консоли работает как консольная а из гуи как гуевая.
в винде нет понятия консольная программа
при запуске программы из консоли, эта самая консоль аттачится к проге, а если из гуя то нечему аттачится, а далее прога сама решает что делать - если есть консоль и хочет быть консольной - работает - если нет консоли - создает консоль, соответственно если не хочет быть консольной и есть консоль то прога ее освобождает (аттачится/если есть консоль/создает/освобождает - соответствующий винапи).
директива компилятора - создавать консольную прогу как раз и управляет какой вариант кода в компилить в прогу, но это в делфе, возможно в фреепаскале както можно более гибко регулировать это.
теперь по существу
если с ходу - в начале работы программы - вызываете функцию получить текущую приаттаченную консоль и если она есть - освобождаете ее
а так надо посмотреть, наверняка это както регулируется (какой код работы с консолью компилятор вкомпиливает), в делфе сделали жестко.
Добавлено спустя 1 час 8 минут 43 секунды:
плохо что во фрипаскале такой код не работает, а в делфе работает.
Добавлено спустя 2 минуты 3 секунды:
самое забавное реализацию ReadLn не нашел в исходниках
Добавлено спустя 21 минуту 17 секунд:
вот это работает
в винде нет понятия консольная программа
при запуске программы из консоли, эта самая консоль аттачится к проге, а если из гуя то нечему аттачится, а далее прога сама решает что делать - если есть консоль и хочет быть консольной - работает - если нет консоли - создает консоль, соответственно если не хочет быть консольной и есть консоль то прога ее освобождает (аттачится/если есть консоль/создает/освобождает - соответствующий винапи).
директива компилятора - создавать консольную прогу как раз и управляет какой вариант кода в компилить в прогу, но это в делфе, возможно в фреепаскале както можно более гибко регулировать это.
теперь по существу
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, создание консольного приложения.
Хорошо, но как тогда создать простое приложение без консоли?
Достаточно указать в программе {$APPTYPE GUI} вместо {$APPTYPE CONSOLE}.
в винде нет понятия консольная программа
Есть -- программа может быть консольной, может быть гуишной. Это то, что вы выбираете при помощи $APPTYPE, что в итоге меняет IMAGE_OPTIONAL_HEADER.Subsystem исполняемого файла.
Re: Windows, создание консольного приложения.
Благодарю!
Так же в Лазарусе можно сделать в "Параметры проекта" -> "Настройка и целевая платформа" поставить галочку "Графическое приложение Win32(-WG)"
Так же в Лазарусе можно сделать в "Параметры проекта" -> "Настройка и целевая платформа" поставить галочку "Графическое приложение Win32(-WG)"
Re: Windows, создание консольного приложения.
Чуть строну то темы, но может пригодиться.
Открывает "временную " консоль из GUI приложения
(Тут уже ответили похожим образом но это все-же чуть "другая история" открыли написали и спросили что нужно и закрыли обратно ).
Тоже самое но хитрее ... (Запускает командную консоль (или консольное приложение) прямо ВНУТРИ окна GUI приложения )
Запуск стороннего приложения на форме своего приложения
Открывает "временную " консоль из GUI приложения
(Тут уже ответили похожим образом но это все-же чуть "другая история" открыли написали и спросили что нужно и закрыли обратно ).
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
AllocConsole;
try
IsConsole := True;
SysInitStdIO;
Writeln(UTF8ToConsole('123 нажмите ентер'));
Readln;
finally
FreeConsole;
end;
end;
Тоже самое но хитрее ... (Запускает командную консоль (или консольное приложение) прямо ВНУТРИ окна GUI приложения )
Запуск стороннего приложения на форме своего приложения
Re: Windows, создание консольного приложения.
Alex2013, увы, не подходит. Если надо я и сам смогу создать дополнительное консольное окно. ))) Меня больше волновало то окно, которое создавал не я.
Re: Windows, создание консольного приложения.
Если напрягает окно вообще и хочется сделать ""программу-ниндзя" то можно сделать "сервис" (он же "демон" он же "служба")
http://www.freepascal.ru/article/lazarus/20090403120204
Инсталлировать его не обязательно он вполне запускается как обычное приложение.
http://www.freepascal.ru/article/lazarus/20090403120204
Инсталлировать его не обязательно он вполне запускается как обычное приложение.
Re: Windows, создание консольного приложения.
Консоль же можно свернуть и пусть в неё что-то пишется. При этом свернутся все консоли, но они не пропадут, вручную их можно развернуть. А вот прибивание консоли нужно тестить на других приложениях, не прибьёт-ли консоли и у них.
Re: Windows, создание консольного приложения.
Сквозняк, большинство пользователей, будет напрягать какое-то непонятно окно, которое вдруг появляется ни с того ни с сего. И при закрытии этого окна, вдруг закрывается программа...
Не хочешь объяснить это неопытному пользователю?
Данный вопрос, думаю интересует многих. Нужна отладка - делай окно, делай логирование. И проверяй.
Конечному пользоателю, это не нужно! Самый максимум что нужно предоставить пользователю, это логирование - достаточно ограниченное, чтоб можно было понять, где происходят проблемы программы.
Всё что нужно тебе - не значит нужно всем
Не хочешь объяснить это неопытному пользователю?
Данный вопрос, думаю интересует многих. Нужна отладка - делай окно, делай логирование. И проверяй.
Конечному пользоателю, это не нужно! Самый максимум что нужно предоставить пользователю, это логирование - достаточно ограниченное, чтоб можно было понять, где происходят проблемы программы.
Всё что нужно тебе - не значит нужно всем
