我们有一个构建机器,我们在上面进行日常构建,并在我们开发的应用程序上执行测试。问题是有些测试失败是因为我们的一些可执行文件崩溃了。如果他们能正常崩溃,那就是失败的测试。在
但他们没有失败,弹出一个阻止他们完成。它们会在一段确定的时间后被杀死(通常是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 Explorer中看到了这一点)并有以下文本:
““XXXXX.exe-应用程序错误“
“位于<;…>;的指令引用位于<;…>;的内存。无法读取内存。“
单击“确定”终止程序
单击“取消”调试程序
我可以这样做:Can the "Application Error" dialog box be disabled?
但是我想知道为什么FindWindowEx
在本例中找不到MessageBox。你知道我该怎么做才能找到那个留言箱吗?在
谢谢!在
稍后编辑: 可以找到禁用弹出窗口的解决方案here。在
我选择避免显示弹出窗口。在
我用了the solution from Microsoft site。在
相关问题 更多 >
编程相关推荐