2016-09-16 7 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でコンソールに与えられます。このコマンドは、この新しいコンソールに結果が表示されるプログラムを実行します。 create processの代わりに_popen(私はしたくない)を使用すると、この表示された結果は_popenによって返されますが、create processでは失われたようです。

+1

CとC++は異なる言語です!あなたが使っているものを選び、間違ったタグを削除してください! – Olaf

+0

'lArgs [0]'はそのコンソールからの入力を得てはいけませんか? – CristiFati

+0

どのプロセスに問題がありますか?打ち上げや打ち上げは? – Medinoc

答えて

1

OK;ここでの問題は、あなたが用語について絶望的に混乱しているということです。

CREATE_NEW_CONSOLEdoes not mean what you think it meansのような "console"という単語です。プロセスはコンソールではありません。コンソールは何かのプロセスですにはがあります。具体的には、コンソールは、コマンド・ライン・アプリケーション(コマンド・インタプリタを含むがこれに限定されない)を入力および出力に使用するテキスト・ベースのウィンドウである。 CREATE_NEW_CONSOLEフラグは、システムに「私の代わりにこの子プロセス用の新しいコンソールウィンドウを作成する」と表示します。

あなたがしようとしているのは、新しいコマンドインタープリタを起動することです。これを行うには、CREATE_NEW_CONSOLEフラグは必要ありません。

(実際に実行するプログラムが実行可能ファイルである場合、プログラムに別のコンソールを使用するかどうかにかかわらず、コマンドインタープリタはまったく必要ありません。コマンドインタープリタを親として実行する必要はありません。一般に、バッチファイルを実行する場合のみ、新しいコマンドインタープリタを子プロセスとして起動します。 、私はそれはあなたがやっているものだと仮定します)

はまた、句「ユーザ入力は、」まさにそれを意味します - 。ユーザープログラムに提供入力を。この文脈では、人がキーボードに入力するもの。子プロセスは、それがコマンドインタープリタであろうと他のプログラムであろうと、ユーザではなく、あなたのケースでは入力を受け入れるのではなく出力を生成しています。あなたが望むものは、子プロセス出力と呼ばれます。あるいは、この場合、コマンドインタープリタ出力と記述することもできます。だから、

、あなたが尋ねることを意図質問:

を私はCreateProcessを使用してコマンドインタプリタを起動していると私は、出力は私のコンソールにではなく、新しいコンソールに行きたいです。これどうやってするの?

これはデフォルトの動作です。 CREATE_NEW_CONSOLEフラグを削除します。このフラグは、Windowsが望んでいないものを明示的に実行するように明示的に指示します。このフラグは、必要な方法で動作します。

-1

代わりに_popenを使用できます。これは、ユーザーからのコマンドライン入力を返します。

関連する問題