0

プログラマーの皆さん、こんにちは。C++プログラムの一部のコンソールアプリケーションに問題があります。私の目的は次のとおりです。

  1. 最初のCMDウィンドウを作成します。
  2. コマンドを実行します。(system( "エラーテキストを出力");)
  3. 2番目のCMDウィンドウを作成します。
  4. system(...)フォーカスを2番目のCMDウィンドウに変更します。
  5. コマンドを実行します。
  6. system(...)フォーカスを最初のCMDウィンドウに変更します。
  7. コマンドを実行します。

このすべての最終目標は、別のCMDウィンドウを生成し、その上でコマンドを実行し、フォーカスを元のCMDウィンドウに戻して他のコードの実行を続行する、CMDアプリケーションによって実行される関数を作成することです。ウィンドウを追跡したり、ウィンドウに戻ったりする必要はありません。新しいウィンドウを作成し、それにフォーカスを切り替え、コマンドを実行し、フォーカスを元のウィンドウに戻すだけです。


  1. 最初のCMDウィンドウは、アプリケーションの起動時に作成されます。
  2. system(...);を使用してこのウィンドウへのコマンドを実行します。正常に動作します。
  3. 2番目のCMDウィンドウを作成します

    HWND new_hWnd = NULL;
    ShellExecute(new_hWnd, "open", "cmd.exe", NULL, NULL, SW_SHOW);
    
  4. これは私が問題を抱えているところです、私はシステム(...)を別のCMDウィンドウにリダイレクトすることができませんでした、そしてこれは私がこれを理解できればステップ5、6、7のために助けが必要な部分です簡単に完了できます。

私はこれをオンラインで調べてみましたが、「パイプ」を使用したいくつかの異なる例に出くわしましたが、それらを再現したり、理解したりすることはできませんでした。また、私はあることに気づきました

    GetConsoleWindow();

現在のCMDウィンドウにハンドルを返す関数。ハンドルを使用してCMDウィンドウを切り替える方法があるはずですが、他のCMDウィンドウにフォーカスを切り替えていないため、その関数を呼び出すことはできません。ハンドルを取得します。

では、system(...)がハンドル付きのさまざまなCMDウィンドウをターゲットにするようにするにはどうすればよいですか?それが不可能な場合、どうすればこの「パイプ」システムを実装できますか。

解決策が後者の場合は、オンラインで見つけたすべての例が非常に大きく、読みやすく、理解しにくいため、できるだけ詳細かつ単純にするようにしてください。

「パイプ」を実装する簡単な方法がない場合は、あなたが見つけることができる最良の例(パイプがどのように機能するかを理解するのに役立つもの)を投稿または指摘してください。私はそれを理解するまで作業を続けます。前もって感謝します!

4

1 に答える 1

1

を呼び出すときにdwCreationFlags値を指定することにより、新しいプロセス用の新しいコンソールを作成できます。CREATE_NEW_CONSOLECreateProcess

ドキュメントを参照してください:

于 2015-07-16T11:07:00.807 に答える