FindWindowEx не находит MessageBox, появляющийся через подключение к удаленному рабочему столу
У нас есть машина для сборки, на которой мы ежедневно строим и выполняем тесты в приложении, которое разрабатываем. Проблема в том, что некоторые тесты не работают, потому что некоторые из наших исполняемых файлов дают сбой. И если они рухнут нормально, это будет просто провальный тест.
Но вместо этого они терпят неудачу с всплывающим окном, которое мешает им закончить. Они будут убиты через определенное время (обычно 5-10 минут). Мы решили эту проблему, создав "сторожевой таймер", который периодически проверяет всплывающие окна и закрывает их при обнаружении. Код Python для проверки здесь:
def CheckGenericPopupByClassName(hwnd,className):
# pass None for desktop popups
hwndPopup = None
hwndFirst = None
consecutiveExceptionCount = 0
# check for popups on Desktop
while True:
try:
hwndPopup = win32gui.FindWindowEx(hwnd, hwndPopup, className, None) # Check with Spy++ for class name
except Exception as e:
print("CheckGenericPopupByClassName exception:"+str(e))
hwndPopup = hwndFirst = None
consecutiveExceptionCount = consecutiveExceptionCount + 1
if consecutiveExceptionCount > 5:
return
continue
consecutiveExceptionCount = 0
if hwndPopup is None or hwndPopup is 0 or hwndPopup is hwndFirst:
break
if hwndFirst is None:
hwndFirst = hwndPopup
HandleGenericPopup(hwndPopup) # this closes the popup
Проблема в том, что MessageBox
находится выше логина подключения к удаленному рабочему столу и не найден предыдущим способом. После того, как я подключаюсь к удаленному рабочему столу, всплывающие окна определяются функцией, которая периодически вызывается.
MessageBox из csrss.exe (я видел это в Process Explorer) и имеет следующий текст:
"XXXXX.exe - Ошибка приложения"
"Инструкция в <...> ссылается на память в <...>. Память не может быть прочитана".
Нажмите на кнопку ОК, чтобы завершить программу
Нажмите на ОТМЕНА, чтобы отладить программу
Я мог бы сделать это: можно ли отключить диалоговое окно "Ошибка приложения"?
Но я хочу знать, почему FindWindowEx
не находит MessageBox в этом случае. Любые идеи, что я должен сделать, чтобы найти этот MessageBox?
Спасибо!
Позднее редактирование: решение для отключения всплывающих окон можно найти здесь.
1 ответ
Я решил не показывать всплывающее окно.
Я использовал решение с сайта Microsoft.