我需要能够启动进程(控制台和窗口)而不会窃取焦点.我发现在.NET框架中执行此操作的唯一方法是使用Microsoft.VisualBasic.AppWinStyle的Microsoft.VisualBasic.Interaction.Shell.[Minimized | Normal] NoFocus(映射到SW_SHOWMINNOACTIVE/SW_SHOWMA传递给ShellExecute).
在我的代码的当前版本(它确实窃取焦点),我使用System.Diagnostics.Process,并依赖于我提供的一些功能,Interaction.Shell方法没有.
2个问题(一个严重,一个让我感到沮丧,我真的不希望得到一个好的答案)
1.)我是否正确,我别无选择,只能自己包装CreateProcess或ShellExecuteEx,或者我错过了其他一些解决方案?我真的希望避免这种情况,因为流程是这样除了这种疏忽了完整的和有用的包装,并有将实现这么多的功能,P/Invoke调用调试,以及各种配套的痛苦.
2.)为什么Microsoft的一个团队会创建这样一个(否则)完整的包装器,然后从ProcessWindowStyle中排除一半可能的值,而另一个团队创建了一个类似的包装器,它不太完整,但提供了所有有用的窗口样式?