2012-02-03 2 views
2

Так что я попытался найти лучшую часть дня для ответа на простой вопрос. Я хочу, чтобы мое приложение C# всплыло еще раз winform по таймеру, а затем закроет его после задержки. Достаточно просто, сделано и сделано. Теперь моя проблема в том, что я хочу, чтобы она действительно была поверх других приложений, если они не являются полноэкранными. Под этим я подразумеваю истинное полноэкранное приложение, такое как игра. Я не хочу вмешиваться в такое приложение, поскольку оно должно иметь приоритет над моим приложением.Как быть OnTop, но не OnTop полноэкранного приложения

Проблема заключается в том, что я использую свойство OnTop в форме всплывающего окна и, хотя он отлично работает для любых других приложений, которые я тестировал во время игры в полноэкранном режиме и в форме, когда она «Show () "s, принимает полноэкранное приложение и переносит его в оконный режим.

Является ли это предполагаемым эффектом свойства «OnTop» с полноэкранными приложениями? Если это так, я могу создать всплывающее окно формы поверх обычных оконных окон и не вмешиваться в полноэкранные приложения?

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

Спасибо заранее.

(я не отправлял никакого кода из-за этого просто быть простой WinForm что "formX: Show()" на таймере с "OnTop" набор свойств)


(EDIT) Поэтому, благодаря awilson53 для того, чтобы поставить меня на правильный путь, мне удалось найти метод (хотя и несколько придирчивый), чтобы определить, является ли приложение полноэкранным. Кажется, что это просто, а «хорошо дух», ответ, после того, как все сказано и сделано.

95% кредита переходит к автору статьи: http://www.richard-banks.org/2007/09/how-to-detect-if-another-application-is.html

~ 5% идет awilson53 для получения меня на верном пути. :)

+0

Я не знаю, как легко выйти сюда. Но, возможно, есть способы повторить все открытые приложения и проверить их состояние окна. И после этого определите своего рода «Z-уровень» для вас. –

+0

Показать окно без кражи фокуса может помочь. http://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus – Josh

+0

Windows не позволяет форме быть «самой» 'OnTop'. Что делать, если у другой программы были настройки того же типа? – LarsTech

ответ

4

Отключить this обертка для функции EnumWindows. Это позволит вам перечислить все открытые окна и определить их состояние окна. Вам нужно проверить свойство EnumWindowItem.Maximized, и если оно истинно, установите для свойства OnTop значение false. Если ни один из результатов EnumWindowItem не был максимальным, вы можете установить OnTop в значение true.

+0

И если вам нравится, если на самом деле есть полноэкранное окно, вы можете установить, чтобы ваше всплывающее окно было верхним в z-порядке ниже полноэкранного с помощью функции API SetWindowPos. –

+0

Спасибо за идею. Я успешно реализовал класс, и он возвращает, будет ли максимизировано окно. Мне нужно было определить, является ли приложение полноэкранным, а не просто максимально развернутым. Однако это привело меня к правильному пути, так как я не считаю, что есть другой способ, кроме использования импорта dll. Посмотрите мое оригинальное сообщение для ответа, который я нашел из-за того, что вы положили меня на правильный мысленный трек. Благодаря! – teek5449

+0

Я печатал в спешке и пропустил различие, которое вы делали между полноэкранным и максимальным, но рад, что я все еще смог помочь, несмотря на себя! –

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