Использование CreateNoWindow
/ WindowStyle
отлично работает в моей системе с notepad.exe (например, он скрыт, но работает в фоновом режиме), поэтому, вероятно, приложение WinForms делает это. Некоторые идеи:
Вариант 1: Если вы контролируете рабочий процесс WinForms, вы можете переопределить Control.SetVisibleCore
, чтобы всегда скрывать форму. Если вы не хотите всегда скрывать это, вы можете передать ему аргумент командной строки, например, /hide
, что сделает его скрытым. Пример (при условии, что для формы уже есть код):
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
protected override void SetVisibleCore(bool value)
{
// You'd probably want to parse the command line.
if (Environment.CommandLine.Contains("/hide"))
base.SetVisibleCore(false);
else
base.SetVisibleCore(value);
}
}
При этом выполнение MyForm.exe
приводит к процессу с видимой формой. Запуск MyForm.exe /hide
приводит к процессу со скрытой формой. Вы можете передать аргумент /hide
из вашего основного процесса, чтобы обычные пользователи, работающие с приложением, все равно его увидели.
Вариант 2: Вы можете скрыть приложение после его запуска, выполнив P / Invoke для ShowWindow
. Подробнее об этом здесь . Это имеет недостаток, заключающийся в том, что вы можете иногда видеть мерцание рабочего окна перед его скрытием. Пример: * * тысяча двадцать-шесть
class Program
{
public static void Main(string[] args)
{
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = @"C:\windows\system32\notepad.exe",
};
Process process = Process.Start(psi);
// Wait until the process has a main window handle.
while (process.MainWindowHandle == IntPtr.Zero)
{
process.Refresh();
}
ShowWindow(process.MainWindowHandle, SW_HIDE);
}
const int SW_HIDE = 0;
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}