web-dev-qa-db-ja.com

コンソールアプリケーションを非表示にする

私は学校のプロジェクトとして、公共図書館用のコンソールアプリケーションを開発しています。コンソールアプリケーションは、ユーザーがログオンしてバックグラウンド作業を行うとすぐに実行されます。

問題は、コンソールアプリケーションを実際に表示したくないということです。見えないようにする必要があります。私が必要とする最後のことは、ライブラリが可能な限り非表示にすることを望んでいることに加えて、CMDウィンドウが開いたり閉じたりすることに驚いた人がいるための苦情です。

このスレッドのコードに従ってみました: http://social.msdn.Microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

しかし、役に立たないのですが、すべての作業が完了した後でも、コンソールアプリケーションが開いたり閉じたりするのを見ることができます。

コンソールが表示されないようにするためのより良い方法はありますか?ありがとう。

19
Kratz

最善の方法は、コンソールアプリケーションとしてコンパイルしないことです。 Windows EXEとしてコンパイルすると、コンソールは表示されません。次に、UIを表示せずに、Mainメソッドで必要なことをすべて実行できます。

ただし、いずれにせよ、コンソールウィンドウを非表示/表示する必要がある場合は、このタスクにFindWindowを使用しないようにします。これには、はるかに信頼性の高いAPIがあるためです: GetConsoleWindow 。これにより、コンソールウィンドウのHWNDが得られ、それをShowWindowに渡すことができます。

37
Josh

Josh Einstein が提案しているように、 ShowWindow Apiを使用してウィンドウを非表示にすることができます。

次に例を示します。

using System.Runtime.InteropServices

class CommandLine
{

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("Kernel32")]
    private static extern IntPtr GetConsoleWindow();

    const int SW_HIDE=0;
    const int SW_SHOW=5;

    static void Main(string[] args)
    {
         IntPtr hwnd;
         hwnd=GetConsoleWindow();
         ShowWindow(hwnd,SW_HIDE);

         //Your logic goes here
    }
}

私はそれをテストしていないので、私はこのコードについてよくわかりません。問題が発生した場合はお知らせください。

16
Searock

試しましたか:プロジェクトのプロパティ>アプリケーション>出力タイプ:「Windowsアプリケーション」へ?

9
NinjaCat

こんにちは私はタスクスケジューラによって呼び出されるコンソールアプリケーションを作成していました。コンソールアプリを表示したくなかったので、プロジェクトのプロパティを変更して、出力がWindowsアプリケーションになるようにしました。

出力タイプをWindowsアプリケーションに変更します。[プロジェクト]-> [プロジェクトプロパティ]に移動し、出力タイプをWindowsアプリケーションに変更します。

2
Nico Leguizamon

コンソールアプリケーションよりも少し複雑です...しかし、誰かがログインしたときにバックグラウンドで何かを本当に実行したい場合は、Windowsサービスアプリケーションを作成できます。

ただし、Windowsサービスのセットアップとインストールには少し追加の作業が必要ですが、Webにはサンプルコードが豊富にあります。

http://msdn.Microsoft.com/en-us/library/9k985bc9(v = VS.80).aspx

http://msdn.Microsoft.com/en-us/library/sd8zc8ha(v = VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

2
Lewray

私は両方の方法を試しました2)Searockそして1)Josh --- Searockのソリューションではコンソールアプリウィンドウはまだ表示されましたが、非常に短い間--- Joshのソリューションではコンソールが表示されず、プログラムに問題はありませんでした-もちろん、すべてのconsole.writeline呼び出しを、情報をログファイルにログアウトする呼び出しに置き換える必要がありました。

注:Joshのソリューションについてコメントしたばかりですが、まだそれはできません:)

0
Dennis Jensen