2016-08-04 16 views
0

プログラムをシャットダウンすることなくコンソールを閉じることはできますか?終了せずにコンソールを閉じる

たとえば、カスタム作成のコンソールを開く場合、またはHWNDを開いてコンソールをバックグラウンドにしたくない場合などです。

はい私はWINAPIWinMainを使うことができますが、自分のプログラムをLinux-Systemsでも実行可能にしたい(ここではHWNDではありません)。

+0

(ナンセンス編集のための謝罪) –

+0

私もそれについて考えて問題ありません;) – Rafiwui

+0

[Windowsの回答](http://stackoverflow.com/a/18677521/1237747) – ST3

答えて

6

C++にはコンソールがありません。コンソールを操作する必要がある場合は、実行するシステムにAPIを使用する必要があります。

これを行うには、共通のインターフェイスを提供し、プリプロセッサを使用して、OSシンボルに基づいて行う必要があるAPI呼び出しを条件付きでコンパイルします。

+0

ゴナ答えとしてこれを受け入れますこれは基本的に私が知りたいものですから。ありがとう。 – Rafiwui

+0

問題ありません。 WindowsやLinuxでコンソールを操作する方法はたくさんあります。これを組み合わせてプリプロセッサを使用して、コンパイル時に使用する部分を選択するだけで済みます。 – NathanOliver

1

これを達成する一般的な方法は、条件付きコンパイルを使用して、ウィンドウにWinMainを実装し、他のプラットフォームにmainを実装することです。

一つの可能​​な製剤:

#ifdef _WIN32 
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPTSTR lpCmdLine, int) 
{ 
    int argc; 
    char ** argv; 
    std::tie (argc, argv) = parse_command_line_arguments (lpCmdLine); 
#else 
int main (int argc, char ** argv) 
{ 
#endif 

    return 0 

} 
-2

これを行うには、クロスプラットフォームの方法はありません。 Linuxでは次のようにすることができます:

int fd = open("/dev/tty", O_RDWR); 
ioctl(fd, TIOCNOTTY, NULL); 

ターミナルから離します。 Windowsの場合

+0

あなたはこれを行うための標準的なクロスプラットフォーム機能はないが、クロスプラットフォームアプリケーションを作成することができます。 – NathanOliver

+0

あなたは私の答えで、どこにそのようなことをすることが不可能だと言ったのを見ましたか? –

+0

あなたは次のように述べています:*これを行うためのクロスプラットフォームの方法はありません*があります。自分でロールを張るか、それを行うライブラリを見つけなければなりません。 – NathanOliver

1

私は、コンソールを必要としない場合しかし、あなたはコンソールアプリケーションプロジェクトを作成してはならない、このような場合のShowWindow (GetConsoleWindow(), SW_HIDE);を使用するために使用されます。 Linuxの場合


(あなたが他の回答を待つ必要があるので、私は、Linuxの男ではないよ)

MAC用

ないMAC開発者のいずれか:)


最終的には、さまざまなプラットフォーム用に異なるコードをコンパイルするためにプリプロセッサが必要になります。

#ifdef _WIN32 
//do what is required for windows 
#endif 
#ifdef __linux__ 
//do what is required for linux 
#endif 
#ifdef __APPLE__ 
//do what is required for OS x machines 
#endif 
関連する問題