【问题标题】:Detecting a message box opened in another application检测在另一个应用程序中打开的消息框
【发布时间】:2010-06-02 15:32:23
【问题描述】:

我正在用 VB.NET 开发一个 Windows 服务,它启动一个执行某些工作的遗留应用程序。该服务充当旧版应用程序的包装器,允许用户自动执行其他手动操作。

一切都很好,除了旧版应用偶尔会显示一个消息框。当它执行此操作时,进程会停止,直到消息框关闭。

由于服务将在服务器上运行,因此不会有用户关闭消息框。

该服务在System.Diagnostics.Process 中启动旧版应用程序。

有没有办法检测我已经开始使用System.Diagnostics.Process 的进程显示了一个消息框?还有有没有办法通过代码关闭消息框?

【问题讨论】:

    标签: vb.net process


    【解决方案1】:

    我还发现 EnumChildWindows 不返回 MessageBox。但我找到了一个网站,向我展示了如何做到这一点。 http://vbcity.com/forums/t/105842.aspx 您想调用传入 GW_ENABLEDPOPUP 的 GetWindow。它就像一个魅力。感谢 Scott Waletzko!

    【讨论】:

      【解决方案2】:

      使用FindWindow 查找应用程序,使用EnumChildWindows 枚举它的所有子窗口,直到找到消息框(如果消息框不是应用程序主窗口的直接子窗口,您可能需要递归我认为是电话)。

      您也许可以跳过FindWindow 调用,而使用ProcessMainWindowHandle 属性,但我还没有检查它是否有效。

      查看这一切的好工具是 Spy++,它可以帮助您查看可以掌握的有关正在运行的进程的一些信息。

      【讨论】:

      • 您好,感谢您的回复。我无法让您的解决方案发挥作用。 EnumChildWindows 只返回主窗口而不是消息框。我目前正在通过基于这篇文章codeproject.com/KB/dialog/… 挂钩到 Windows 消息的解决方案
      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多