освободить parent console до завершения приложения

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
rc
Сообщения: 2
Зарегистрирован: 13 окт 2004, 03:56

13 окт 2004, 04:01

Hi,
Как освободить родительскую консоль (cmd.exe) до завершения приложения?
При запуске консольного приложения из родительской консоли (command.com, cmd.exe) в Windows 98 можно освободить род. консоль до завершения приложения вызвав FreeConsole(). Т.е. программа запустилась, написала что-либо на родительской консоле, освободила ее (окно готово к приему команд) и продолжает выполняться.
В NT-системах (2000, XP) при запуске консольного приложения из родительсой консоли (CMD.EXE) освободить ее (окно CMD) невозможно пока приложение не завершится. Даже после вызова FreeConsole() окно CMD.EXE продолжает ожидать завершения приложения, не реагируя ни на что - вроде как зависла. Курсор появляется только когда программа завершится.
Как освободить родительскую консоль в NT до завершения приложения?
------------------------
Сергей
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

13 окт 2004, 13:26

В ремарке написано что никто не может убить консоль пока она используется другими процессами - возможно твой случай.
Можно попробовать сделать следующее - получить окно консоли GetConsolWnd или что-то такое и убить ее как простое окно.
В SAD - все в SAD.
rc
Сообщения: 2
Зарегистрирован: 13 окт 2004, 03:56

14 окт 2004, 11:50

Нет, ее не надо убивать - только освободить. Чтобы она снова готова была для приема команд.
Под W98 функция FreeConsole делает это. А в NT только сбрасыват указатели стандартного ввода/вывода, консоль же продолжает ожидать завершения программы.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

18 окт 2004, 00:53

Как освободить родительскую консоль в NT до завершения приложения?
Запустить консольное приложение

а) либо с помощью команды start:

start myapp.exe

б) либо вызовом CreateProcess с параметром dwCreationFlags = CREATE_NEW_CONSOLE.
Ответить