72 votes

.NET - WindowStyle = hidden vs CreateNoWindow = true?

Lorsque je démarre un nouveau processus, quelle différence cela fait-il si j'utilise le

WindowStyle = hidden

ou l'

CreateNoWindow = true

propriété de l' ProcessStartInfo classe?

89voto

Liz Points 3835

Hans dit, WindowStyle est une recommandation adoptée par le processus, l'application peut choisir de l'ignorer.

CreateNoWindow contrôle la façon dont la console fonctionne pour le processus de l'enfant, mais il ne travaille pas seul.

CreateNoWindow fonctionne en conjonction avec UseShellExecute comme suit:

Pour exécuter le processus sans fenêtre:

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = true; 
info.UseShellExecute = false;
Process processChild = Process.Start(info); 

Pour exécuter le processus de l'enfant dans sa propre fenêtre (console)

UseShellExecute=true, which is the default value.
ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
Process processChild = Process.Start(info); // separate window

Pour exécuter le processus de l'enfant dans le parent de la fenêtre de la console

UseShellExecute=false.
ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.UseShellExecute = false; // causes consoles to share window 
Process processChild = Process.Start(info); 

23voto

Hans Passant Points 475940

CreateNoWindow ne s'applique qu'en mode console apps, il ne crée pas la fenêtre de la console.

WindowStyle s'applique uniquement à Windows natif applications à interface graphique. C'est un soupçon transmises à la WinMain() point d'entrée d'un tel programme. Quatrième argument, nCmdShow, pour lui dire comment afficher la fenêtre principale. C'est le même indice qui apparaît comme le "Run" dans un raccourci sur le bureau. Notez que "caché" n'est pas une option, peu correctement conçu Windows programme d'honorer cette demande. Depuis que snookers l'utilisateur, il ne peut pas obtenir le programme activé plus et ne peut le tuer avec le Gestionnaire de Tâches.

16voto

SwDevMan81 Points 22634

À l'aide de Réflecteur, il ressemble WindowStyle est utilisé si l' UseShellExecute est réglé, sinon, il utilise CreateNoWindow.

Dans MSDN exemple, vous pouvez voir comment ils ont mis:

// 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();

Dans l'autre exemple, c'est juste ci-dessous parce qu' UseShellExecute valeur par défaut est true

// UseShellExecute defaults to true, so use the WindowStyle
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X