Я позволю моему приложению автоматизироваться из другого приложения, открыв сетевой канал. По сути, приложение B будет эмулировать пользователя, использующего приложение A, которое является приложением WinForms.
Моя единственная проблема на данный момент заключается в том, что я не хочу, чтобы приложение B получало доступ к функциям, к которым у вас не было бы доступа, если бы вы были настоящим пользователем, например, нажимая кнопки в форме, пока есть окно сообщения или модальное диалоговое окно сверху этого. Это должно держать меня в безопасности, в то же время предоставляя приложению B полный контроль над приложением A.
Что бы я сделал, это переопределил MessageBox.Show
с помощью пользовательского кода, а также каждый вызов любого ShowDialog
в приложении A, чтобы установить для некоторого глобального логического значения значение false, пока показывается модальный диалог, который сообщит, является ли основная форма доступно в данный момент или нет. Тогда я мог бы либо заставить приложение B ждать, либо вернуть ошибку.
Но вместо моего решения есть какие-то встроенные средства, позволяющие определить, есть ли у формы диалоговое окно вверху или нет? Я пробовал «Активный», «Фокусированный», даже нативный GetForegroundWindow
, но ни один из них не работает так, как мне нужно. Начнем с того, что все они будут ложными, если мое приложение будет свернуто, чего я не хочу.