web-dev-qa-db-ja.com

C#でコンソールアプリケーションを非表示にする方法

C#でコンソールアプリケーションを使用していますが、ユーザーに表示されないようにしたいと思います。

どうやってやるの?

27
menacheb

Windowsフォームアプリケーションとしてコンパイルします。次に、Windowsを明示的に開かない場合、UIは表示されません。

53
driis

ProjectPropertiesで、出力タイプをWindowsアプリケーションとして設定します。

16
Nico.S

コンソールアプリケーションは必要ないようですが、(表示されている)ウィンドウを開かないWindowsGUIアプリケーションが必要です。

5
peSHIr

次のコードを使用してコンソールアプリケーション「MyAppProxy」を作成し、MyAppProxyを起動ディレクトリに配置します。

public static void main(string[] args)
{
   Process p = new Process("MyApp");
   ProcessStartUpInfo pinfo = new ProcessStartUpInfo();
   p.StartupInfo = pinfo;
   pinfo.CreateNoWindow = true;
   pinfo.ShellExecute = false;

   p.RaiseEvents = true;

   AutoResetEvent wait = new AutoResetEvent(false);
   p.ProcessExit += (s,e)=>{ wait.Set(); };

   p.Start();
   wait.WaitOne();
}

コードの正確性を確認しなかったため、ここで特定の項目を修正する必要がある場合があります。一部のプロパティ名が異なる可能性があるため、コンパイルされない場合がありますが、アイデアが得られることを願っています。

4
Akash Kava

最良の方法は、ウィンドウなしでプロセスを開始することです。

        Process p = new Process();
        p.StartInfo.FileName = "cmd.exe";
        p.StartInfo.Arguments = "echo Hello!";
        //either..
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        //or..
        p.StartInfo.CreateNoWindow = true;
        p.Start();

他の考えられる解決策を参照してください-

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

そして、

ShowInTaskbar = falseの場合、別のプロセスウィンドウをフォアグラウンドにします

2
Nayan

他に何も機能しないときにC#でコンソールアプリケーションを非表示にするには、次のコードを使用します。

[DllImport("kernel32.dll")]
public static extern bool FreeConsole();

FreeConsole()をコードの任意の場所に配置し、それをInit()に配置すると、コマンドラインが非表示になります。

2
Quispie

FindWindow()の呼び出しをPinvokeしてウィンドウへのハンドルを取得してから、ShowWindow()を呼び出してウィンドウを非表示にすることができますOR ProcessStartInfo.CreateNoWindowを使用して、別のアプリケーションからアプリケーションを起動します

1
Ovidiu Pacurar

私は共有する一般的な解決策を持っています:

_using System;
using System.Runtime.InteropServices;

namespace WhateverNamepaceYouAreUsing
{
    class Magician
    {
    [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

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

        const int HIDE = 0;
        const int SHOW = 5;

        public static void DisappearConsole()
        {
            ShowWindow(GetConsoleWindow(), HIDE);
        }
    }
}
_

このクラスをプロジェクトに含めて、Magician.DisappearConsole();を呼び出すだけです。

プログラムをクリックして起動すると、コンソールが点滅します。コマンドプロンプトから実行すると、コマンドプロンプトは実行後すぐに消えます。

これは、目に見えないプロセスとしてコンピューターのバックグラウンドで永久に実行されるDiscordボットに対して行います。 TopShelfを機能させるよりも簡単でした。他の場所で見つけたコードの助けを借りてこれを書く前に、いくつかのTopShelfチュートリアルが失敗しました。 ; P

また、Visual Studio>プロジェクト>プロパティ>アプリケーションの設定を変更して、コンソールアプリケーションではなくWindowsアプリケーションとして起動しようとしましたが、プロジェクトに関する何かが原因で、コンソールが非表示になりませんでした。おそらく、DSharpPlusが起動時にコンソールを起動する必要があるためです。 。知りません。理由が何であれ、このクラスを使用すると、コンソールがポップアップした後、コンソールを簡単に強制終了できます。

この魔術師が誰かを助けることを願っています。 ;)

0
Lucas Jarrett