PDA

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



rc
13.10.2004, 04:01
Hi,
Как освободить родительскую консоль (cmd.exe) до завершения приложения?
При запуске консольного приложения из родительской консоли (command.com, cmd.exe) в Windows 98 можно освободить род. консоль до завершения приложения вызвав FreeConsole(). Т.е. программа запустилась, написала что-либо на родительской консоле, освободила ее (окно готово к приему команд) и продолжает выполняться.
В NT-системах (2000, XP) при запуске консольного приложения из родительсой консоли (CMD.EXE) освободить ее (окно CMD) невозможно пока приложение не завершится. Даже после вызова FreeConsole() окно CMD.EXE продолжает ожидать завершения приложения, не реагируя ни на что - вроде как зависла. Курсор появляется только когда программа завершится.
Как освободить родительскую консоль в NT до завершения приложения?
------------------------
Сергей

Kolinus
13.10.2004, 13:26
В ремарке написано что никто не может убить консоль пока она используется другими процессами - возможно твой случай.
Можно попробовать сделать следующее - получить окно консоли GetConsolWnd или что-то такое и убить ее как простое окно.

rc
14.10.2004, 11:50
Нет, ее не надо убивать - только освободить. Чтобы она снова готова была для приема команд.
Под W98 функция FreeConsole делает это. А в NT только сбрасыват указатели стандартного ввода/вывода, консоль же продолжает ожидать завершения программы.

Eugie
18.10.2004, 00:53
Как освободить родительскую консоль в NT до завершения приложения?

Запустить консольное приложение

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

start myapp.exe

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