2009-11-26 10 views
8

C++でsystemコマンドを使用して外部プログラムを呼び出すときに、コマンドを実行するたびにコンソールウィンドウが開いて終了します。C++で "system"を呼び出すときにコンソールを無効にする

コンソールウィンドウを開くのを避けるにはどうすればよいですか?ソリューションがプラットフォームに依存しないことができれば幸いです。コマンドが終了するまで私のプログラムが待つようにしたいと思います。

+0

重複した回答(Windowsの場合):http://stackoverflow.com/questions/1597289/hide-console-in-c-system-function-win – Steed

答えて

3

ウィンドウを使用しているようです。

Linux(および* nix一般)では、systemへの呼び出しをそれぞれforkexecの呼び出しに置き換えます。ウィンドウズでは、Windows APIに何らかのスポーン・ア・新しいプロセス機能があると思います。—ドキュメントを参照してください。

シェルコマンドや外部プログラムを実行しているときは、実行中のコマンドや外部プログラムを持つプラットフォームに依存するため、プログラムはプラットフォームに依存しません。

+0

一般的に言えば、プラットフォームに依存するプログラムシェルコマンドを使用する場合しかし、この場合は、使用しているマシンに外部プログラムがインストールされていることを確認しています。シンプルなシェルコマンドではありません。あなたの答えについて - WindowsではCreateProcess、Unixではfork + execを使うことは可能ですが、私はこれをもっとうまく解決することを望んでいました。 – Dana

+0

CreateProcess/fork + execについては何が面白くないのですか?素敵なクラスでラップすると、プロセスを開始する非常にエレガントな方法があります。さらに、出力/入力のリダイレクトなどのオプションを簡単に追加できます。 – stijn

1

Errmを参照してください。 CreateProcessまたはShellExecute

5

これはおそらく最も簡単な方法ですが、この方法を実行するとプログラムがフリーズしないようにすることもできます。 まず、Windowsヘッダーを含めることを忘れないでください。

#include <Windows.h> 

次に、次の関数を使用してコマンドを実行する必要があります。

WinExec("your command", SW_HIDE); 

注: WinExecメソッドは、10年以上非推奨となっています。しかし、今日はまだうまく動作します。必要でない場合は、このメソッドを使用しないでください。

...あなたの代わりにを使用します。

system("your command"); 
+2

私はWinExecを「最良の」方法と呼ぶことはほとんどありません.17年以上前倒しされています。 –

+0

オクラホマ、なぜ私が多分そう言ったのかわからなかった。 –

+1

私は何時間も探していたので、私はupvoteにしなくても、私にはうまく働いた。ありがとうございました – Demurgos

0

新しい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 answerMSDNに基づいて、私は仕事関数を書きました。ちょうどあなたのように電話してくださいsystem()

関連する問題