Если вы увлекаетесь программированием, вам при определенных задачах иногда требуется скрывать консольное приложение и ход его работы от пользователя. К примеру данные способы я использую при обновлении приложений, а так же при проверке целостности файлов, я не думаю что эту информацию нужно видеть пользователю, либо просто открытое черное командное окно. Вот для таких целей и служит следующий код, который позволить запускать приложение в скрытом состоянии. Есть несколько вариантов это сделать, но лучше использовать для этой задачи winapi, вот им мы и воспользуемся.
namespace Consol
{
class Program
{
const int SW_HIDE = 0;
const int SW_SHOW = 5;
const int SW_Min = 2;
const int SW_Max = 3;
const int SW_Norm = 4;
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[STAThread]
static void Main(string[] args)
{
var handle = GetConsoleWindow();
//скрыть консоль
ShowWindow(handle, SW_HIDE);
//отобразить консоль
ShowWindow(handle, SW_SHOW);
//свернуть консоль
ShowWindow(handle, SW_Min);
//развернуть консоль
ShowWindow(handle, SW_Max);
//нормальный размер консоли
ShowWindow(handle, SW_Norm);
}
}
}
В примере так же описывается возможность программно с помощью winapi сворачивать, разворачивать, скрывать, отображать и открывать консоль в нормальном состоянии.
Однако этот способ имеет недостатки, потому что консоль все таки появится на несколько миллисекунд и пользователь увидит ее.

Исправим и эту проблему. Для этого создадим новый проект WinForm

и зайдя в окно обозревателя просто удалим конструктор Form1.cs и в результате у нас должно быть так :

Теперь заходим в фаил Program.cs и за комментируем либо удаляем существующий внутри метода main код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp31
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//было так
//Application.Run(new Form1());
}
}
}
И все наша работа происходит в этом классе Program, а работа ни чем не отличается от консольной программы. Да же если написать следующий пример:
[STAThread]
static void Main(string[] args)
{
//args = Environment.Is64BitOperatingSystem();
// Application.EnableVisualStyles();
// Application.SetCompatibleTextRenderingDefault(false);
Thread.Sleep(10000);
MessageBox.Show("nookery.ru");
// Application.Run(new Form1(args));
}
Только спустя 10 секунд мы увидим сообщение.
