プログラムをシャットダウンすることなくコンソールを閉じることはできますか?終了せずにコンソールを閉じる
たとえば、カスタム作成のコンソールを開く場合、またはHWND
を開いてコンソールをバックグラウンドにしたくない場合などです。
はい私はWINAPI
とWinMain
を使うことができますが、自分のプログラムをLinux-Systemsでも実行可能にしたい(ここではHWND
ではありません)。
プログラムをシャットダウンすることなくコンソールを閉じることはできますか?終了せずにコンソールを閉じる
たとえば、カスタム作成のコンソールを開く場合、またはHWND
を開いてコンソールをバックグラウンドにしたくない場合などです。
はい私はWINAPI
とWinMain
を使うことができますが、自分のプログラムをLinux-Systemsでも実行可能にしたい(ここではHWND
ではありません)。
C++にはコンソールがありません。コンソールを操作する必要がある場合は、実行するシステムにAPIを使用する必要があります。
これを行うには、共通のインターフェイスを提供し、プリプロセッサを使用して、OSシンボルに基づいて行う必要があるAPI呼び出しを条件付きでコンパイルします。
ゴナ答えとしてこれを受け入れますこれは基本的に私が知りたいものですから。ありがとう。 – Rafiwui
問題ありません。 WindowsやLinuxでコンソールを操作する方法はたくさんあります。これを組み合わせてプリプロセッサを使用して、コンパイル時に使用する部分を選択するだけで済みます。 – NathanOliver
これを達成する一般的な方法は、条件付きコンパイルを使用して、ウィンドウに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
}
これを行うには、クロスプラットフォームの方法はありません。 Linuxでは次のようにすることができます:
int fd = open("/dev/tty", O_RDWR);
ioctl(fd, TIOCNOTTY, NULL);
ターミナルから離します。 Windowsの場合
あなたはこれを行うための標準的なクロスプラットフォーム機能はないが、クロスプラットフォームアプリケーションを作成することができます。 – NathanOliver
あなたは私の答えで、どこにそのようなことをすることが不可能だと言ったのを見ましたか? –
あなたは次のように述べています:*これを行うためのクロスプラットフォームの方法はありません*があります。自分でロールを張るか、それを行うライブラリを見つけなければなりません。 – NathanOliver
:
私は、コンソールを必要としない場合しかし、あなたはコンソールアプリケーションプロジェクトを作成してはならない、このような場合の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
(ナンセンス編集のための謝罪) –
私もそれについて考えて問題ありません;) – Rafiwui
[Windowsの回答](http://stackoverflow.com/a/18677521/1237747) – ST3