2013-08-13 6 views
1

У меня есть приложение, которое пользователь фактически не закрывает - вместо закрытия всего приложения главное окно скрыто. Затем, когда пользователь снова запускает одно и то же приложение, второй экземпляр связывается с первым (уже запущенным) экземпляром, а первый экземпляр пытается вывести основное окно приложения на передний план.Проблемы с отображением окна на передний план

Проблема в том, что это в основном преуспевает, но иногда терпит неудачу. Я сделал свое исследование, и кажется, что фоновые процессы не могут вывести их окна на передний план, что несколько разумно. Решением является вызов AllowSetForegroundWindow из второго экземпляра (который может вывести окно на передний план, поскольку пользователь запустил его) и дать разрешение на первый экземпляр программы.

Мой вопрос: как я могу убедиться, что мой код работает? Я спрашиваю об этом, потому что не нашел способа проверить, вызвал ли вызов AllowSetForegroundWindow эффект. Я не знаю, когда первый экземпляр не сможет установить окно переднего плана (потому что он работает в основном и редко не работает), поэтому я не знаю, как проверить, работает ли все правильно. Любые иды?

+2

Существует грязный трюк, который всегда срабатывает. Это на самом деле трюк, встроенный в платформу .NET, поднимет его на поддерживаемую грязь. Не каждый программист на C# может [иметь дело с ним] (http://msdn.microsoft.com/en-us/library/Microsoft.VisualBasic.Interaction.AppActivate.aspx), но отчаянно всегда помогает. –

+0

@HansPassant: Спасибо, хорошо знать все трюки :) – xx77aBs

ответ

2

AllowSetForegroundWindow() имеет код возврата, который вы можете проверить:

Функция будет выполнена, если вызывающий процесс не может установить окно переднего плана .

Когда приложение запускается он должен быть в состоянии установить окно переднего плана, и поэтому поэтому AllowSetForegroundWindow()должны успеха, и экземпляр вашего существующего приложения в должен быть в состоянии прийти на фронт.

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

+0

AllowSetForegroundWindow действительно возвращает True, так что пока я буду считать, что все работает так, как ожидалось. – xx77aBs

Смежные вопросы