.Нетто - Стиль_окна = скрытый и CreateNoWindow = правда?
когда я начинаю новый процесс, какая разница, если я использую
WindowStyle = hidden
или
CreateNoWindow = true
свойства ProcessStartInfo
класса?
3 ответа:
как сказал Ханс, WindowStyle-это рекомендация, переданная процессу, приложение может игнорировать ее.
CreateNoWindow управляет тем, как консоль работает для дочернего процесса, но он не работает в одиночку.
CreateNoWindow работает в сочетании с UseShellExecute следующим образом:
чтобы запустить процесс без какого-либо окна:
ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.CreateNoWindow = true; info.UseShellExecute = false; Process processChild = Process.Start(info);
чтобы запустить дочерний процесс в своем собственном окне (новая консоль)
ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = true; // which is the default value. Process processChild = Process.Start(info); // separate window
выполнить дочерний процесс в окне консоли родителя
ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = false; // causes consoles to share window Process processChild = Process.Start(info);
CreateNoWindow применяется только к приложениям в режиме консоли, он не будет создавать окно консоли.
WindowStyle применяется только к собственным приложениям Windows GUI. Это подсказка, переданная функции WinMain() точка входа такой программы. Четвертый аргумент, nCmdShow, говорит ему, как показать свое главное окно. Это та же подсказка, которая отображается как параметр "выполнить" в ярлыке рабочего стола. Обратите внимание, что "скрытый" не является опцией там, немногие правильно разработанные программы Windows соблюдают это запрос. Поскольку это снукеры пользователя, он больше не может активировать программу и может только убить ее с помощью Диспетчера задач.
используя рефлектор, он выглядит как
WindowStyle
используется, еслиUseShellExecute
установлен, в противном случае он используетCreateNoWindow
.в Примере MSDN, вы можете увидеть, как они установили это:
// Using CreateNoWindow requires UseShellExecute to be false myProcess.StartInfo.UseShellExecute = false; // You can start any process, HelloWorld is a do-nothing example. myProcess.StartInfo.FileName = "C:\HelloWorld.exe"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();
в другом примере, его чуть ниже, потому что
UseShellExecute
по умолчанию true// UseShellExecute defaults to true, so use the WindowStyle ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); startInfo.WindowStyle = ProcessWindowStyle.Minimized;