Я хочу запретить пользователям запускать мое приложение несколько раз на одном компьютере, поэтому я использовал решение из этого потока: Как правильно создать приложение с одним экземпляром?
Это работает нормально, но у меня проблема с отображением моего приложения при открытии модального окна (например, с view.ShowDialog();
). Это сценарий:
- Пользователь запускает мое приложение и открывает модальное окно.
- Затем он пытается снова запустить мое приложение, код в процедуре запуска этого второго экземпляра приложения находит другое запущенное приложение и транслирует ему сообщение WM_SHOWME, чтобы показать себя. Затем второй экземпляр приложения завершается.
- Первое приложение получает сообщение WM_SHOWME (используя решение из Как обрабатывать сообщения WndProc в WPF?). Теперь он должен вывести самое верхнее окно на передний план, и это мой вопрос - как я могу получить самое верхнее окно моего приложения, если самое верхнее окно является модальным и даже не активным? Я пробовал использовать решение из Обратиться к активному окну в WPF?, но, конечно, мои окна не активны, поэтому это не так. т работать.
PS - когда приложение запущено и открывается модальное окно, и когда я нахожу курсор на значок на панели задач, я вижу два окна - главное окно и модальное окно. Я могу щелкнуть по главному окну (которое, конечно, отключено, потому что модальное окно находится поверх него), а также могу щелкнуть по модальному окну. Мое решение работает так же, как если бы я щелкнул по главному окну, но я хочу, чтобы оно могло активировать самое верхнее окно, которое в данном случае является модальным.
Итак, есть идеи, как вывести самое верхнее модальное окно (или главное окно, если модальные окна не отображаются) на передний план?