.Нетто - Стиль_окна = скрытый и CreateNoWindow = правда?


когда я начинаю новый процесс, какая разница, если я использую

WindowStyle = hidden

или

CreateNoWindow = true

свойства ProcessStartInfo класса?

3 57

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;