我們有一個構建機器,我們每天都在我們開發的應用程序上建立並執行測試。問題是一些測試失敗,因爲我們的一些可執行文件崩潰了。如果他們通常會崩潰,那只是一個失敗的測試。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。
'FindWindow'是錯誤的工具。改用[SetWinEventHook](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640.aspx)。 – IInspectable