Ответ 1
Ваше использование 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);
}