Как получить Process.MainWindowHandle, когда окно скрыто - PullRequest
4 голосов
/ 18 февраля 2011

У меня есть приложение WPF. Когда он запускается, мне нужно проверить, запущен ли уже экземпляр. Если это так, то я «показываю» запущенный экземпляр с помощью PInvoke:

SendNotifyMessage(proc.MainWindowHandle, ShowYourself, IntPtr.Zero, IntPtr.Zero);

где proc - это другой экземпляр, который работает

проблема в том, когда proc скрыт в системном трее. MainWindowHandle равно 0. Я много раз искал, но не получилось получить MainWindowHandle.

Кто-нибудь знает как?

Спасибо

1 Ответ

0 голосов
/ 18 февраля 2011

Лучший способ - использовать межпроцессный обработчик, например мьютекс. Здесь - хороший пример. Еще одна вещь, если вы хотите открыть скрытое приложение из другого экземпляра, вы должны установить связь клиент-сервер между двумя приложениями. Приложение, которое уже запущено, должно быть сервером и должно слушать команду, чтобы стать видимой. Это довольно просто, но для понимания требуется много времени.

ОБНОВЛЕНИЕ: Здесь Я создал простую библиотеку, которая позволяет вам управлять экземплярами приложения. Это очень просто, но я оставляю некоторые комментарии

ApplicationSingleInstance - это основной класс для управления экземплярами приложения Когда приложение запускается, проверьте свойство IsInstanceAlreadyRun, если это правда, вызовите метод StartServer (), если false, вызовите метод NotifyAboutNewInstance (). Также вы должны подписаться на событие NewApplicationInstanceLoaded, чтобы узнать, был ли запущен новый экземпляр приложения. Не забудьте отписаться от событий и утилизировать экземпляр ApplicationSingleInstance

ОБНОВЛЕНИЕ: Я разместил эту библиотеку и объяснение на codeproject

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