2015-05-08 20 views
2

我們有一個構建機器,我們每天都在我們開發的應用程序上建立並執行測試。問題是一些測試失敗,因爲我們的一些可執行文件崩潰了。如果他們通常會崩潰,那只是一個失敗的測試。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(我認爲這與進程資源管理器),並具有下列文字:

「XXXXX.exe - 應用程序錯誤」

「的在<指令...>引用的內存在< ...>內存無法讀取。「

單擊確定以終止該程序

單擊取消調試程序

我可以這樣做: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

回答