답변:
응용 프로그램의 속성으로 이동 하여 출력 유형 을 콘솔 응용 프로그램 에서 Windows 응용 프로그램 으로 변경하십시오 .
방법은 다음과 같습니다.
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 응용 프로그램으로 설정하는 것이 좋습니다 . 콘솔 창은 표시되지 않지만 콘솔 응용 프로그램과 같은 모든 작업을 실행합니다.
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를 추가하고 빌드 조치를 "컨텐츠"로 설정하고 복사를 출력 디렉토리로 복사를 설정하십시오. cmdow는 콘솔 창이 실행될 때 콘솔 창을 숨 깁니다.
콘솔을 다시 표시하려면 인수를 변경하면됩니다.
HideConsole.StartInfo.Arguments = "MyConsole /Vis";