C++でsystem
コマンドを使用して外部プログラムを呼び出すときに、コマンドを実行するたびにコンソールウィンドウが開いて終了します。C++で "system"を呼び出すときにコンソールを無効にする
コンソールウィンドウを開くのを避けるにはどうすればよいですか?ソリューションがプラットフォームに依存しないことができれば幸いです。コマンドが終了するまで私のプログラムが待つようにしたいと思います。
C++でsystem
コマンドを使用して外部プログラムを呼び出すときに、コマンドを実行するたびにコンソールウィンドウが開いて終了します。C++で "system"を呼び出すときにコンソールを無効にする
コンソールウィンドウを開くのを避けるにはどうすればよいですか?ソリューションがプラットフォームに依存しないことができれば幸いです。コマンドが終了するまで私のプログラムが待つようにしたいと思います。
ウィンドウを使用しているようです。
Linux(および* nix一般)では、system
への呼び出しをそれぞれfork
とexec
の呼び出しに置き換えます。ウィンドウズでは、Windows APIに何らかのスポーン・ア・新しいプロセス機能があると思います。—ドキュメントを参照してください。
シェルコマンドや外部プログラムを実行しているときは、実行中のコマンドや外部プログラムを持つプラットフォームに依存するため、プログラムはプラットフォームに依存しません。
一般的に言えば、プラットフォームに依存するプログラムシェルコマンドを使用する場合しかし、この場合は、使用しているマシンに外部プログラムがインストールされていることを確認しています。シンプルなシェルコマンドではありません。あなたの答えについて - WindowsではCreateProcess、Unixではfork + execを使うことは可能ですが、私はこれをもっとうまく解決することを望んでいました。 – Dana
CreateProcess/fork + execについては何が面白くないのですか?素敵なクラスでラップすると、プロセスを開始する非常にエレガントな方法があります。さらに、出力/入力のリダイレクトなどのオプションを簡単に追加できます。 – stijn
exec()はPOSIXのようにかなりプラットフォームに依存しません。ウィンドウ上では、UNIX上ではexec()の間に_exec()です。http://msdn.microsoft.com/en-us/library/431x4c1w(VS.71).aspx
Errmを参照してください。 CreateProcess
またはShellExecute
。
これはおそらく最も簡単な方法ですが、この方法を実行するとプログラムがフリーズしないようにすることもできます。 まず、Windowsヘッダーを含めることを忘れないでください。
#include <Windows.h>
次に、次の関数を使用してコマンドを実行する必要があります。
WinExec("your command", SW_HIDE);
注: WinExec
メソッドは、10年以上非推奨となっています。しかし、今日はまだうまく動作します。必要でない場合は、このメソッドを使用しないでください。
...あなたの代わりにを使用します。
system("your command");
私はWinExecを「最良の」方法と呼ぶことはほとんどありません.17年以上前倒しされています。 –
オクラホマ、なぜ私が多分そう言ったのかわからなかった。 –
私は何時間も探していたので、私はupvoteにしなくても、私にはうまく働いた。ありがとうございました – Demurgos
新しいcmd.exe
ウィンドウを使用せずにコマンドを実行する方法です。すべてのWindowsプラットフォーム上
int windows_system(const char *cmd)
{
PROCESS_INFORMATION p_info;
STARTUPINFO s_info;
LPSTR cmdline, programpath;
memset(&s_info, 0, sizeof(s_info));
memset(&p_info, 0, sizeof(p_info));
s_info.cb = sizeof(s_info);
cmdline = _tcsdup(TEXT(cmd));
programpath = _tcsdup(TEXT(cmd));
if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info))
{
WaitForSingleObject(p_info.hProcess, INFINITE);
CloseHandle(p_info.hProcess);
CloseHandle(p_info.hThread);
}
}
作品:Roland Rabien's answerとMSDNに基づいて、私は仕事関数を書きました。ちょうどあなたのように電話してくださいsystem()
。
重複した回答(Windowsの場合):http://stackoverflow.com/questions/1597289/hide-console-in-c-system-function-win – Steed