Активировать окно скрытого процесса - PullRequest
2 голосов
/ 19 сентября 2011

Если пользователь пытается запустить другой экземпляр моего приложения, я хочу активировать окно процесса, который уже запущен.

Чтобы найти процесс, я вызываю Process.GetProcessesByName(), что дает мне System.Diagnostics.Process экземпляр запущенного экземпляра моего приложения. Тем не менее, я скрыл свой процесс от панели задач, используя

Form.ShowInTaskbar = false

Это приводит к тому, что Process.MainWindowHandle равен нулю, поэтому я не могу получить доступ к текущему окну запущенного процесса.

Есть ли другой способ активировать окно уже запущенного процесса?

1 Ответ

2 голосов
/ 19 сентября 2011

Да, свойство ShowInTaskBar является особенным.Есть несколько других свойств класса Form, которые находятся в той же категории.Эти свойства реализуются с помощью флагов стилей, указанных в собственном вызове winapi CreateWindowEx ().Флаг WS_EX_APPWINDOW для ShowInTaskBar.

Что является проблемой при изменении этих свойств, окно должно быть воссоздано .Winforms делает это автоматически для вас, но имеет несколько побочных эффектов.Одним из них является то, что значение свойства Handle изменяется.Делая невозможным для класса Process найти MainWindowHandle назад.

Вам нужно будет найти окно назад другим способом.Заставить EnumWindows работать определенно непросто для форм Winforms, вы не можете получить предполагаемое имя класса окна.Не изменять свойство ShowInTaskBar, безусловно, лучший подход.Также рассмотрите возможность использования класса WindowsFormsApplicationBase , это делается тривиально с помощью метода OnStartupNextInstance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...