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