У нас есть машина для сборки, на которой мы ежедневно создаем и выполняем тесты в разрабатываемом нами приложении. Проблема в том, что некоторые тесты не работают, потому что некоторые из наших исполняемых файлов сбой. И если они рухнут нормально, это будет неудачный тест.FindWindowEx не обнаруживает, что MessageBox появляется через подключение к удаленному рабочему столу
Но вместо этого они терпят неудачу с всплывающим окном, которое мешает им закончить. Они будут убиты после определенного времени (обычно 5-10 минут). Мы преодолеваем эту проблему, создавая «сторожевой таймер», который периодически проверяет наличие всплывающих окон и закрывает их при обнаружении. Код питона для проверки здесь:
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 - Ошибка приложения"
«Инструкция по < ...> ссылочной памяти на < ...> Память не может быть прочитана ».
Нажмите на кнопку OK, чтобы завершить работу программы
Нажмите на ОТМЕНА для отладки программы
Я мог бы сделать это: Can the "Application Error" dialog box be disabled?
Но я хочу знать, почему FindWindowEx
не находит MessageBox в Это дело. Любые идеи, что я должен сделать, чтобы найти этот MessageBox?
Спасибо!
Редакция: Решение об отключении всплывающих окон можно найти here.
'FindWindow' - неправильный инструмент. Вместо этого используйте [SetWinEventHook] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640.aspx). – IInspectable