Показать / скрыть окно консоли приложения консоли C #

Я искал информацию о том, как скрыть собственное окно консоли. Удивительно, но единственными решениями, которые я смог найти, были хакерские решения, которые включали FindWindow() чтобы найти окно консоли по его названию . Я углубился в Windows API и обнаружил, что есть намного лучший и простой способ, поэтому я хотел бы опубликовать его здесь, чтобы другие могли найти.

Как вы скрываете (и показываете) консольное окно, связанное с моим собственным консольным приложением C #?

Вот как:

 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 .

Зачем вам консольное приложение, если вы хотите скрыть консоль? знак равно

Я рекомендую установить тип Project Output в приложение Windows вместо приложения Console. Он не покажет вам консольное окно, но выполните все действия, например, приложение консоли.

Вы можете сделать обратный и установить тип вывода приложения для: Windows Application. Затем добавьте этот код в начало приложения.

 [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

Вы можете создать приложение Windows (с окном или без него) и показать консоль по желанию. Используя этот метод, окно консоли никогда не появляется, если вы явно не показываете его. Я использую его для двухрежимных приложений, которые я хочу запускать в режиме консоли или gui в зависимости от того, как они открываются.

Если вы не хотите, чтобы это зависит от названия windows, используйте это:

  [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 , которая позволит вам скрыть консольные windows на основе заголовка консоли.

 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"; 
Interesting Posts

Невозможно установить контент-тип в ‘application / json’ в jQuery.ajax

Как использовать openURL для совершения телефонного звонка в Swift?

Как создать обратный вызов JavaScript для получения информации о загрузке изображения?

Почтовая программа Windows 10 никогда не синхронизируется автоматически

Ошибка: (1, 0) Плагин с id ‘com.android.application’ не найден

Ввод текста заголовка WPF datagrid

Получить твиты с фотографиями с помощью twitter search api

Создать счетчик с несколькими переменными

Предоставление частичных представлений с использованием ajax

Как получить информацию о клиенте, такую ​​как ОС и браузер

Храните программы от использования My Documents

Насколько важно иметь соответствующую скорость ОЗУ?

Могу ли я отключить ручку Adobe Reader при масштабировании и прокрутке с указателем стрелки вниз?

Создание загрузочного USB-накопителя из дистрибутива, разделенного на два DVD-диска ISO

Приложения CORS и phonegap

Давайте будем гением компьютера.