[C#] C # 콘솔 응용 프로그램의 콘솔 창 표시 / 숨기기

나는 자신의 콘솔 창을 숨기는 방법에 대한 정보를 봤습니다. 놀랍게도, 내가 찾은 유일한 솔루션 은 제목으로FindWindow() 콘솔 창을 찾는 해킹 솔루션이었습니다 . Windows API에 대해 조금 더 깊이 파고 들었고 훨씬 더 쉽고 쉬운 방법이 있다는 것을 알았으므로 다른 사람들이 찾을 수 있도록 여기에 게시하고 싶었습니다.

내 C # 콘솔 응용 프로그램과 관련된 콘솔 창을 어떻게 숨기고 표시합니까?



답변

응용 프로그램의 속성으로 이동 하여 출력 유형콘솔 응용 프로그램 에서 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);


답변

콘솔 자체를 숨기려면 왜 콘솔 응용 프로그램이 필요합니까? =)

콘솔 응용 프로그램 대신 프로젝트 출력 유형을 Windows 응용 프로그램으로 설정하는 것이 좋습니다 . 콘솔 창은 표시되지 않지만 콘솔 응용 프로그램과 같은 모든 작업을 실행합니다.


답변

반대로 수행하고 응용 프로그램 출력 유형을 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
}

이 코드는 콘솔 showConsoletrue


답변

내 게시물보기 :

Windows 응용 프로그램에서 콘솔 표시

창을 사용하거나 사용하지 않고 Windows 응용 프로그램을 만들고 원하는대로 콘솔을 표시 할 수 있습니다. 이 방법을 사용하면 명시 적으로 표시하지 않으면 콘솔 창이 나타나지 않습니다. 콘솔 또는 GUI 모드에서 실행 방법에 따라 실행하려는 이중 모드 응용 프로그램에 사용합니다.


답변

“숨기기 만”할 수있는 작업 :

의 출력 형식 변경 콘솔 응용 프로그램Windows 응용 프로그램 ,

그리고 대신에 앱을 계속 Console.Readline/key사용 new ManualResetEvent(false).WaitOne()하기 위해 사용할 수 있습니다 .


답변

창 제목에 의존하지 않으려면 다음을 사용하십시오.

    [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());