Обнаружение окна сообщения, открытого в другом приложении - PullRequest
1 голос
/ 02 июня 2010

Я занимаюсь разработкой службы Windows в VB.NET, которая запускает устаревшее приложение, выполняющее некоторую работу. Служба действует как оболочка унаследованного приложения, позволяя пользователям автоматизировать ручную работу.

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

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

Служба запускает устаревшее приложение в System.Diagnostics.Process.

Есть ли способ обнаружить, что окно сообщения было отображено процессом, который я начал использовать System.Diagnostics.Process? И есть ли способ закрыть окно сообщения с помощью кода?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Я также обнаружил, что EnumChildWindows не возвращает MessageBox. Но я нашел сайт, который показал мне, как это сделать. http://vbcity.com/forums/t/105842.aspx Вы хотите вызвать GetWindow, передавая GW_ENABLEDPOPUP. Оно работало завораживающе. Спасибо Скотту Валецко!

1 голос
/ 02 июня 2010

Используйте FindWindow, чтобы найти приложение, используйте EnumChildWindows, чтобы перечислить все его дочерние окна, пока вы не найдете окно сообщения (если оно не является прямым потомком главного окна приложения, возможно, вам придется иметь рекурсивный звонит я думаю).

Возможно, вы сможете пропустить вызов FindWindow и вместо этого использовать свойство MainWindowHandle Process, но я не проверял, работает ли он.

Хорошим инструментом для просмотра всего этого является Spy ++, который может помочь вам увидеть некоторую информацию, которую вы можете получить о запущенном процессе.

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