我们有一个构建机器,在我们开发的应用程序上,我们每天进行构建和执行测试。问题是一些测试失败了,因为我们的一些可执行文件正在崩溃。如果它们正常崩溃,那只是一个失败的测试。
但相反,他们失败了弹出阻止他们完成。他们会在确定的时间后被杀死(通常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中看到了这种情况),并具有以下文本:
"XXXXX.exe -应用程序错误“
“<...>的指令引用了<...>的内存。内存无法读取。”
单击OK以终止程序
单击“取消”调试程序
我可以这么做:“应用程序错误”对话框可以禁用吗?
但我想知道为什么FindWindowEx在这种情况下找不到MessageBox。我该怎么做才能找到那个MessageBox呢?
谢谢!
稍后编辑:禁用弹出窗口的解决方案可以找到这里。
发布于 2015-07-30 19:15:53
我选择了避免显示弹出窗口。
我用的是Microsoft站点的解决方案。
https://stackoverflow.com/questions/30118260
复制相似问题