Мне нужно иметь возможность запускать процессы (как консольные, так и оконные) без кражи фокуса. Единственный способ в .NET Framework, который я нашел для этого, - это Microsoft.VisualBasic.Interaction.Shell с Microsoft.VisualBasic.AppWinStyle. [Минимизированный | Нормальный] NoFocus (который отображается в SW_SHOWMINNOACTIVE/SW_SHOWMA, который передается в ShellExecute).
В текущей версии моего кода (который делает кражу фокуса) я использую System.Diagnostics.Process и полагаюсь на некоторые функции, которые дают мне, чего не имеет метод Interaction.Shell.
2 вопроса (один серьезный, и один из моих разочарований, что я действительно не ожидаю хорошего ответа)
1.) Правильно ли, что у меня нет выбора, кроме как самостоятельно обернуть CreateProcess или ShellExecuteEx, или я пропустил какое-то другое решение? Я действительно надеялся избежать этого, так как Process - это такая полная и полезная оболочка, кроме этого надзора, и было бы так много возможностей для реализации, вызовы P/Invoke для отладки и всевозможные разнообразные боли.
2.) Почему одна команда в Microsoft создала такую (в противном случае) полную оболочку, а затем исключила бы половину возможных значений из ProcessWindowStyle, в то время как другая команда создала аналогичную оболочку, которая была намного менее полной, но при условии, что все полезные стили окна?