Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Как оставить консольное прилож. работать, убрав консольное окно?   Найти похожие ветки 

 
Vorobyev Sergey   (2003-09-20 08:22) [0]

Привет всем?
Можно ли проделать следующее:

В дельфи пишется консольное приложение ( {$APPTYPE CONSOLE})
После проведения различных инициализирующих действий с выводом информации в консоль ( WriteLn) нужно убрать эту самую консоль и оставить работать это приложение в памяти.

То есть, например, запускают эту программу из Far-а (или cmd.exe). Сообщения инициализации выводятся в консоль Far-а (или cmd), затем консоль освобождается (можно дальше работать в Far-е), а программа остается в памяти выполнять свои задачи..

Замечу, что программа должна быть как можно проще, без всяких bat-файлов, не GUI и небольшого размера..


 
jack128 ©   (2003-09-20 11:07) [1]

Не знаю, что будет с консолью фара, но попробуй так
FreeConsole();


 
iWorm ©   (2003-09-22 02:18) [2]

Я думаю, что можно вообще не писать косольное приложение...
Повторяю это мое личное мнение на данный момент...
Я думаю, что размер не такой уж будет и большой если *.dpr подрихтовать вот так:
Наример вот программка, которая за время свое "жизни" всего навсего ищет окно винампа и ставит предыдущую песню:

program Project1;

uses
messages,
windows;

var
h: HWND;
{$R *.res}

begin
h := findwindow("winamp v1.x",
nil);
if h <> 0 then
sendmessage(h,
WM_COMMAND,
40044,
0);

end.


это все компилится в 9 кб, а если еще и иконку программы убрать, то и вовсе 8!
В принципе можно использовать и юниты, пример для наглядности...

С уважением, Иван Семенов


 
webpauk   (2003-09-22 10:38) [3]

{$APPTYPE CONSOLE}) - убери этот код и окно исчезнет


 
PVOzerski ©   (2003-09-22 11:05) [4]

IMHO, через Pipes, перенаправив I/O куда-нибудь (скажем, в nul, а лучше, какой-нибудь программе, чтобы анализировать и управлять). Правда, консоли не будет видно с самого начала. Если же сделать по совету [3], прога может начать валиться на всех консольных I/O операциях (readln, writeln и т.п.).


 
Vorobyev Sergey   (2003-09-22 11:40) [5]

Консоль мне нужна (ну люблю я консольные приложения и вывод в консоль - это просто и наглядно ИМХО для простых приложений и глюков почти нет)
{$APPTYPE CONSOLE} конечно можно убрать, а чтобы программа "не валилась" на консольных операциях можно создать свою консоль AllocConsole (тогда при запуске например из фара будет создаваться другая консоль, убрать консоль FreeConsole)..

Я по сути сейчас так и делаю:
1. AllocConsole (новая консоль)
2. Инициализация, Write; WriteLn (тексты выводятся в консоль)
3. FreeConsole (консоль освобождается)
4. Программа остается в памяти

Но если сделать {$APPTYPE CONSOLE}, то новая консоль не будет создаваться (если вызвали из консоли например фара), а тексты сообщений будут выводится в эту консоль.
Только эту консоль не уберешь, пока программа не завершится, а надо чтобы программа осталась в памяти (причем без создания всяких других процессов и т.п.). Я понимаю, что это скорее всего невозможно,
А ВДРУГ КТО ЗНАЕТ???


 
PVOzerski ©   (2003-09-22 11:48) [6]

Может, оно и выпедреж, и не самый лучший способ, но вот возможное решение. Пусть консольной будет программа-загрузчик, которая загрузит 2-ю (GUI), пока надо, пообщается с ней (скажем, через DDE), а потом завершится, оставив 2-ю работать.


 
Vorobyev Sergey   (2003-09-22 12:08) [7]


> Может, оно и выпедреж, и не самый лучший способ, но вот
> возможное решение. Пусть консольной будет программа-загрузчик,
> которая загрузит 2-ю (GUI), пока надо, пообщается с ней
> (скажем, через DDE), а потом завершится, оставив 2-ю работать.

Мне все-таки "дешевле" выводить в другую консоль, чем выходить из положения так.. Но, спасибо..
Теперь меня уже принципиально интересует, возможно ли это сделать из одной и той же программы.. Может вообще это ОС не позволяет ?


 
PVOzerski ©   (2003-09-22 12:11) [8]

У меня такое впечатление, что именно такое делает сервер MySQL. Но как - не разбирался.


 
Kiddy ©   (2003-09-22 14:42) [9]

Мысли вслух... Как насчет двухпоточного приложения. Первый поток выводит консоль, инициализирует второй поток, а потом завершается, остовляя второй процесс работать в памяти....


 
Vorobyev Sergey   (2003-09-22 15:00) [10]


> Kiddy © (22.09.03 14:42) [9]

Простите, но мне кажется вы не совсем понимаете суть вопроса и обсуждения.. (еще раз простите)

С выводом на консоль, инициализацией и закрытием консоли проблем нет.. (см. [7]).
Для этого не надо два потока.. Тем более, чтобы оставить процесс работать в памяти..


 
Kiddy ©   (2003-09-22 16:37) [11]

По сути я предложил то же что и PVOzerski только в рамках одного приложения... сам я такого не делал, но думаю что можно. Первый процесс выводит в кансоль, например Far-a, и запускает второй процесс, а сам завершается. Я не знаю как это поведет себя в реале, но это будет одно приложение, что и требуется в принципе.


 
nikkie ©   (2003-09-22 19:06) [12]

логично было бы FreeConsole, но не работает... :(

видимо единственный вариант - с двумя процессами, как уже предлагали. но через DDE и т.п. - имхо не нужно. предлагаю такой вариант:
1 программа - основная, консольная.
2 программа - стартер, тоже консольный.

стартер создает pipe и через CreateProcess с флагом STARTF_USESTDHANDLES стартует основную программу, перенаправив stdout/stderr. читает из pipe и выводит в консоль.

основная программа пишет с помощью Writeln, а по окончанию инициализации пишет определенную строку (пустую или exit?) или символ (Ctrl+Z?), по получении которой стартер закрывает pipe и завершает работу. основная программа продолжает работу.

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



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
7-18662
Opryshok
2003-07-21 17:48
2003.10.06
как остановить поток?


14-18600
саша2
2003-09-17 12:51
2003.10.06
что уж он так


1-18337
Slym
2003-09-22 14:00
2003.10.06
Как передать параметры в MS Script Control?


3-18232
Vagrant
2003-09-16 03:28
2003.10.06
FireBird - программное создание хранимой процедуры


6-18496
[SHS]MAD
2003-08-08 11:34
2003.10.06
Глюки с IP адресом