FindWindowEx无法找到出现在远程桌面连接上的MessageBox

2024-10-02 02:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个构建机器,我们在上面进行日常构建,并在我们开发的应用程序上执行测试。问题是有些测试失败是因为我们的一些可执行文件崩溃了。如果他们能正常崩溃,那就是失败的测试。在

但他们没有失败,弹出一个阻止他们完成。它们会在一段确定的时间后被杀死(通常是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。在


Tags: ornone应用程序forifisclassnamemessagebox

热门问题