プログラマーの皆さん、こんにちは。C++プログラムの一部のコンソールアプリケーションに問題があります。私の目的は次のとおりです。
- 最初のCMDウィンドウを作成します。
- コマンドを実行します。(system( "エラーテキストを出力");)
- 2番目のCMDウィンドウを作成します。
- system(...)フォーカスを2番目のCMDウィンドウに変更します。
- コマンドを実行します。
- system(...)フォーカスを最初のCMDウィンドウに変更します。
- コマンドを実行します。
このすべての最終目標は、別のCMDウィンドウを生成し、その上でコマンドを実行し、フォーカスを元のCMDウィンドウに戻して他のコードの実行を続行する、CMDアプリケーションによって実行される関数を作成することです。ウィンドウを追跡したり、ウィンドウに戻ったりする必要はありません。新しいウィンドウを作成し、それにフォーカスを切り替え、コマンドを実行し、フォーカスを元のウィンドウに戻すだけです。
- 最初のCMDウィンドウは、アプリケーションの起動時に作成されます。
- system(...);を使用してこのウィンドウへのコマンドを実行します。正常に動作します。
2番目のCMDウィンドウを作成します
HWND new_hWnd = NULL; ShellExecute(new_hWnd, "open", "cmd.exe", NULL, NULL, SW_SHOW);
- これは私が問題を抱えているところです、私はシステム(...)を別のCMDウィンドウにリダイレクトすることができませんでした、そしてこれは私がこれを理解できればステップ5、6、7のために助けが必要な部分です簡単に完了できます。
私はこれをオンラインで調べてみましたが、「パイプ」を使用したいくつかの異なる例に出くわしましたが、それらを再現したり、理解したりすることはできませんでした。また、私はあることに気づきました
GetConsoleWindow();
現在のCMDウィンドウにハンドルを返す関数。ハンドルを使用してCMDウィンドウを切り替える方法があるはずですが、他のCMDウィンドウにフォーカスを切り替えていないため、その関数を呼び出すことはできません。ハンドルを取得します。
では、system(...)がハンドル付きのさまざまなCMDウィンドウをターゲットにするようにするにはどうすればよいですか?それが不可能な場合、どうすればこの「パイプ」システムを実装できますか。
解決策が後者の場合は、オンラインで見つけたすべての例が非常に大きく、読みやすく、理解しにくいため、できるだけ詳細かつ単純にするようにしてください。
「パイプ」を実装する簡単な方法がない場合は、あなたが見つけることができる最良の例(パイプがどのように機能するかを理解するのに役立つもの)を投稿または指摘してください。私はそれを理解するまで作業を続けます。前もって感謝します!