Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Консольное приложение


wal ©   (2005-02-04 10:21:00) 

Господа, подскажите пожалуйста, как написать консольное приложение, напрмер тот же "Hello World!" не используя директиву {$APPTYPE CONSOLE}?
Это, так сказать, частный вопрос. А в общем, необходимо сделать программу, причем на этапе компиляции не известно, в консольном режиме она будет работать, или в GUI, это должно определяться параметрами командной строки во время запуска.

С уважением.


DVM   (2005-02-04 16:19:00) [1]

кстати на некоторых компьютерах все работает и без {$APPTYPE CONSOLE}, а на некоторых только с ней. И там и там XP.


Jay1982   (2005-02-04 15:20:00) [2]

RTFM


Игорь Шевченко   (2005-02-04 15:05:00) [3]

MSDN может прокомментировать:

"If an application does not have associated standard handles, such as a service running on an interactive desktop, and has not redirected them, the return value is NULL."

С уважением,


wal   (2005-02-04 14:51:00) [4]

Вобщем никак. Жаль.
Еще один интересный момент заметил в ходе экспериментов.
GetStdHandle для GUI-приложения возвращает ноль а не INVALID_HANDLE_VALUE. Кто-нибудь может прокомментировать  подобное поведение?

С уважением.


Игорь Шевченко   (2005-02-04 13:48:00) [5]


> Какие действия происходят в приложении, откомпилированном
> с директивой {$APPTYPE CONSOLE} до перехода на begin?


При создании процесса подсистеме Win32 передается указание связать новый процесс с консольным сервером или не связывать. Если связывать, то окнами процесса (не создаными явно) начинает заведовать консольный сервер.

С уважением,


MBo   (2005-02-04 13:41:00) [6]

>написать консольное приложение, не используя директиву {$APPTYPE CONSOLE}?
dcc32 -cc projectname.dpr


BiN   (2005-02-04 13:33:00) [7]

wal ©   (04.02.05 13:22) [6]

1. при выполнении такого приложения в GUI-режиме из командной строки, консоль командной строки останется "заблокированной", пока я программу не закрою (этого не происходит при запуске приложения без {$APPTYPE CONSOLE}).
2. при запуске из проводника в GUI-режиме будет создана консоль, которая мне совершенно ни к чему.


Думаю, нужно делать 2 отдельных процесса. MS таким образом реализует WScript.exe и CScript.exe

wal ©   (04.02.05 13:26) [8]

Какие действия происходят в приложении, откомпилированном с директивой {$APPTYPE CONSOLE} до перехода на begin?


Ctrl+Alt+C


wal   (2005-02-04 13:26:00) [8]

Переформулирую вопрос.
Какие действия происходят в приложении, откомпилированном с директивой {$APPTYPE CONSOLE} до перехода на begin?

С уважением.


wal   (2005-02-04 13:24:00) [9]

>BiN ©   (04.02.05 13:19) [5]
>В XP и далее можно исп-ть AttachConsole
А до ХР?


wal   (2005-02-04 13:22:00) [10]

>VMcL ©   (04.02.05 13:11) [3]
>Консольному приложению не возбраняется создавать GUI окна.
Это я тоже в курсе, но
1. при выполнении такого приложения в GUI-режиме из командной строки, консоль командной строки останется "заблокированной", пока я программу не закрою (этого не происходит при запуске приложения без {$APPTYPE CONSOLE}).
2. при запуске из проводника в GUI-режиме будет создана консоль, которая мне совершенно ни к чему.

>Jay1982 ©   (04.02.05 13:12) [4]
>...выполняй определённые действия.
Какие?

С уважением.


BiN   (2005-02-04 13:19:00) [11]

wal ©   (04.02.05 12:52) [2]

AllocConsole() мне новую консоль открывает, даже если я запустил из командной строки.


В XP и далее можно исп-ть AttachConsole
С уважением


Jay1982   (2005-02-04 13:12:00) [12]

Передай в параметрах запуска тип приложения, а потом в зависимости от типа выполняй определённые действия


VMcL   (2005-02-04 13:11:00) [13]

>> wal ©  (04.02.05 10:21)

> необходимо сделать программу, причем на этапе компиляции не известно, в консольном режиме она будет работать, или в GUI, это должно определяться параметрами командной строки во время запуска.

Консольному приложению не возбраняется создавать GUI окна.


wal   (2005-02-04 12:52:00) [14]

AllocConsole() мне новую консоль открывает, даже если я запустил из командной строки. Такое поведение меня не устраивает, если запустился из командной строки, то в ту консоль и писать надо. Так же, естественно, не работает перенаправление вывода project.exe>1.txt

С уважением.


Чапаев   (2005-02-04 10:22:00) [15]

Вызывай AllocConsole() & FreeConsole() по мере необходимости.


Наверх

Титульная страница Поиск, карта сайта Написать письмо