2016-09-16 2 views
-2

Я делаю это:получить пользовательский ввод от CreateProcess с CREATE_NEW_CONSOLE

if (!CreateProcessA(NULL, lArgs, NULL, NULL, FALSE, 
    CREATE_NEW_CONSOLE, NULL, NULL, &StartupInfo, &ProcessInfo)) 
{ 
    free(lArgs); 
    return GetLastError(); 
} 

Но я не знаю, как получить ввод с консоли.

Должен ли я записать файл для него?

EDIT 1: нет проблем, он работает (и код является как C, так и C++). создать консоль, что я ищу: Как получить в этой области пользовательский ввод с этой новой консоли? lArgs содержит параметры/командную строку, которые я передаю в эту новую консоль.

EDIT 2: (у меня нет никаких проблем. Он работает нормально.) Детский процесс - это консоль, и я пытаюсь получить вход пользователя в консоль (дочерний процесс) в родительский процесс.

EDIT 3: дочерний процесс - это просто консоль, как в «CREATE_NEW_CONSOLE». Командная строка передается в консоль с помощью lArgs. Эта команда запускает программу, результат которой отображается в этой новой консоли. Если я использую _popen (я не хочу) вместо createprocess, этот отображаемый результат возвращается _popen, но с createprocess он просто кажется потерянным.

+1

C и C++ - это разные языки! Выберите тот, который вы используете, и удалите неправильный тег! – Olaf

+0

Не нужно 'lArgs [0]' получать данные с этой консоли? – CristiFati

+0

Какой процесс имеет проблемы? Запуск или запуск? – Medinoc

ответ

1

OK; Казалось бы, проблема в том, что вы безнадежно запутались в терминологии.

Слово «консоль», как в CREATE_NEW_CONSOLEdoes not mean what you think it means. Никакой процесс не является консолью; консоль - это процесс имеет. Конкретно, консоль представляет собой текстовое окно, в котором приложения командной строки (включая, но не ограничиваясь этим, интерпретатор команд) используют для ввода и вывода. Флаг CREATE_NEW_CONSOLE указывает системе «создать новое окно консоли для этого дочернего процесса вместо использования моего».

То, что вы пытаетесь сделать, по-видимому, состоит в том, чтобы запустить новый командный интерпретатор . Для этого вам не нужен флаг CREATE_NEW_CONSOLE.

(Обратите внимание, что если программа, которую вы действительно хотите запустить, является исполняемым файлом, вам не нужен интерпретатор команд, независимо от того, хотите ли вы, чтобы программа имела отдельную консоль или нет. Любой исполняемый файл, включая исполняемый файл командной строки, может запускаться независимо, ему не нужно иметь интерпретатор команд в качестве родителя. Вообще говоря, вы запускаете новый интерпретатор команд в качестве дочернего процесса только в том случае, если вы хотите запустить командный файл, ради аргумента , я буду считать, что то, что вы делаете)

Кроме того, фраза «пользовательский ввод» означает только, что -. на вход что пользователя предоставляет программу. В этом контексте материал, который человек набирает на клавиатуре. Детский процесс, будь то командный интерпретатор или другая программа, не является пользователем, и в вашем случае он генерирует вывод, а не принимает ввод. Итак, то, что вы хотите, называется выходным процессом , или в этом случае вы можете в качестве альтернативы описать его как вывод интерпретатора .

Итак, вопрос, который вы хотели спросить:

Я запускает командный интерпретатор с CreateProcess, и я хочу, чтобы выходной пойти в мою консоль, а не на новую консоль. Как я могу это сделать?

И ответ: это поведение по умолчанию. Уберите флаг CREATE_NEW_CONSOLE, который явно сообщает Windows о том, чего именно вы не хотите, и он будет вести себя так, как вы хотите.

-1

Вместо этого вы можете использовать _popen. Он вернет ввод командной строки от пользователя.

Смежные вопросы