回答:
方法は次のとおりです。
using System.Runtime.InteropServices;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
var handle = GetConsoleWindow();
// Hide
ShowWindow(handle, SW_HIDE);
// Show
ShowWindow(handle, SW_SHOW);
csproj
ファイルを手動で編集することによってのみ、アプリケーションをデバッグモードのコンソールアプリケーションにすることができます。Visual Studioにはこれを行うためのGUIがありませんが、csproj
ファイルを正しく編集すれば、その設定が受け入れられます。
using System.Runtime.InteropServices;
const int SW_SHOWMINIMIZED = 2;
、その後、ShowWindow(handle, SW_SHOWMINIMIZED);
この方法でコンソールを開始するには隠されていない、単に最小化。
ただ、アプリケーションのに行くのプロパティと変更出力タイプからコンソールアプリケーションをするWindowsアプリケーション。
コンソール自体を非表示にしたいのに、なぜコンソールアプリケーションが必要なのですか。=)
プロジェクトの出力タイプをコンソールアプリケーションではなくWindowsアプリケーションに設定することをお勧めします。コンソールウィンドウは表示されませんが、コンソールアプリケーションのようにすべてのアクションが実行されます。
TopShelf
実行することもできます。これにより問題が解決しますConsoles
逆にして、アプリケーションの出力タイプをWindowsアプリケーションに設定できます。次に、このコードをアプリケーションの最初に追加します。
[DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll", EntryPoint = "AllocConsole", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int AllocConsole();
private const int STD_OUTPUT_HANDLE = -11;
private const int MY_CODE_PAGE = 437;
private static bool showConsole = true; //Or false if you don't want to see the console
static void Main(string[] args)
{
if (showConsole)
{
AllocConsole();
IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
Microsoft.Win32.SafeHandles.SafeFileHandle safeFileHandle = new Microsoft.Win32.SafeHandles.SafeFileHandle(stdHandle, true);
FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
}
//Your application code
}
場合は、このコードは、コンソールが表示されますshowConsole
ですtrue
ここに私の投稿を参照してください:
Windowsアプリケーション(ウィンドウの有無にかかわらず)を作成し、必要に応じてコンソールを表示できます。この方法を使用すると、明示的に表示しない限り、コンソールウィンドウは表示されません。開いている方法に応じてコンソールモードまたはGUIモードで実行したいデュアルモードアプリケーションに使用します。
ウィンドウのタイトルに依存したくない場合は、これを使用します。
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
...
IntPtr h = Process.GetCurrentProcess().MainWindowHandle;
ShowWindow(h, 0);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormPrincipale());
小さなバッチアプリケーションの統合に問題がない場合は、コンソールタイトルに基づいてコンソールウィンドウを非表示にするCmdow.exeと呼ばれるこのプログラムがあります。
Console.Title = "MyConsole";
System.Diagnostics.Process HideConsole = new System.Diagnostics.Process();
HideConsole.StartInfo.UseShellExecute = false;
HideConsole.StartInfo.Arguments = "MyConsole /hid";
HideConsole.StartInfo.FileName = "cmdow.exe";
HideConsole.Start();
exeをソリューションに追加し、ビルドアクションを「コンテンツ」に設定し、[出力ディレクトリにコピー]を適切なものに設定します。実行すると、コンソールウィンドウが非表示になります。
コンソールを再び表示するには、引数を変更するだけです
HideConsole.StartInfo.Arguments = "MyConsole /Vis";