Как я могу узнать, получает ли я окно ввода (не показывает модальный диалог и т. Д.) - PullRequest
0 голосов
/ 20 декабря 2011

Я позволю моему приложению автоматизироваться из другого приложения, открыв сетевой канал. По сути, приложение B будет эмулировать пользователя, использующего приложение A, которое является приложением WinForms.

Моя единственная проблема на данный момент заключается в том, что я не хочу, чтобы приложение B получало доступ к функциям, к которым у вас не было бы доступа, если бы вы были настоящим пользователем, например, нажимая кнопки в форме, пока есть окно сообщения или модальное диалоговое окно сверху этого. Это должно держать меня в безопасности, в то же время предоставляя приложению B полный контроль над приложением A.

Что бы я сделал, это переопределил MessageBox.Show с помощью пользовательского кода, а также каждый вызов любого ShowDialog в приложении A, чтобы установить для некоторого глобального логического значения значение false, пока показывается модальный диалог, который сообщит, является ли основная форма доступно в данный момент или нет. Тогда я мог бы либо заставить приложение B ждать, либо вернуть ошибку.

Но вместо моего решения есть какие-то встроенные средства, позволяющие определить, есть ли у формы диалоговое окно вверху или нет? Я пробовал «Активный», «Фокусированный», даже нативный GetForegroundWindow, но ни один из них не работает так, как мне нужно. Начнем с того, что все они будут ложными, если мое приложение будет свернуто, чего я не хочу.

1 Ответ

2 голосов
/ 20 декабря 2011

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

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