我正在VB.NET中开发一个Windows服务,它启动了一个执行一些工作的遗留应用程序。该服务充当遗留应用程序的包装器,允许用户自动执行其他手动操作。
一切都运行良好,除了偶尔遗留应用程序显示消息框。执行此操作时,该过程将暂停,直到消息框关闭。
由于服务将在服务器上运行,因此没有用户可以关闭消息框。
该服务在System.Diagnostics.Process
。
有没有办法检测到我已经开始使用System.Diagnostics.Process
的进程显示了一个消息框?有没有办法通过代码关闭消息框?
答案 0 :(得分:2)
我还发现EnumChildWindows没有返回MessageBox。但我找到了一个网站,向我展示了如何做到这一点。 http://vbcity.com/forums/t/105842.aspx 你想调用GetWindow传入GW_ENABLEDPOPUP。它就像一个魅力。感谢Scott Waletzko!
答案 1 :(得分:1)
使用FindWindow
查找应用程序,使用EnumChildWindows
枚举所有子窗口,直到找到消息框(如果消息框不是应用程序主窗口的直接子窗口)我认为必须有递归调用。
您可以跳过FindWindow
来电,而是使用MainWindowHandle
的{{1}}属性,但我还没有检查是否有效。
查看所有这些内容的好工具是Spy ++,它可以帮助您查看有关正在运行的流程的一些信息。