Отключение ввода консоли родительского процесса

Тема в разделе "WASM.WIN32", создана пользователем necrostaz, 25 ноя 2008.

  1. necrostaz

    necrostaz New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2008
    Сообщения:
    17
    Пишу GUI приложение, которому, при запуске с параметрами, необходим консольный вывод. При запуске приложения пытаюсь приаттачиться к консоли родительского процесса (AttachConsole), если не удается то создаю консоль (AllocConsole). В общем работает все нормально, но есть одна проблема - при аттаче к родительской консоли(например при запуске из под cmd.exe) ввод от cmd также направляется в консоль, т.е. если юзер вздумает например нажать Enter то вывод превратится в кашу....можно ли отключить ввод родительской консоли или вообще полность ввод ? Варианты с созданием консольного приложения с последующим убийством консоли или двух приложений не подходят. Спасибо.
     
  2. necrostaz

    necrostaz New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2008
    Сообщения:
    17
    С частью проблемы уже справился. На деле мы получаем 2 процесса-конкурента, работающие с одной консолью, отсюда и все траблы. Поэтому когда запускается мой процесс, он замораживает все потоки у родителя, а в конце работы размораживает. Изврат, конечно, но все же лучше чем ничего. Но проблемы на этом не заканчиваются, во-первых ввод все равно возможен, просто теперь он не обрабатывается парентом, кроме того историю команд хранит консоль а не cmd и она она тоже сохраняется. Все поступающие евенты на консоль, парент хоть и не обрабатывает, но после разморозки они все равно к нему поступают, что неприятно. Возможно обработчик событий можно как нить проставить/снять ? Кроме того как же отключить все таки возможность ввода? И можно ли это сделать не влезая в адресное пространство парента ? Может кто-нибудь все таки сталкивался ?
     
  3. necrostaz

    necrostaz New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2008
    Сообщения:
    17
    Решил таки задачку. Агоритм такой: замораживаю парента, создаю на нем удаленный поток, в котором вызываю FreeConsole, в конце работы программы опять создаю удаленный поток на паренте, в котором вызываю AttachConsole(pid моего процесса),размораживаю парента. Все. Неплохо еще сохранять и восстанавливать бы Ctrl обработчики и историю консоли, но уже решаемые мелочи.)