2015-05-08 1 views
2

У нас есть машина для сборки, на которой мы ежедневно создаем и выполняем тесты в разрабатываемом нами приложении. Проблема в том, что некоторые тесты не работают, потому что некоторые из наших исполняемых файлов сбой. И если они рухнут нормально, это будет неудачный тест.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.

+0

'FindWindow' - неправильный инструмент. Вместо этого используйте [SetWinEventHook] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640.aspx). – IInspectable

ответ

Смежные вопросы