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.

Другие вопросы по тегам