当用户会话时间结束时,我试图隐藏应用的所有窗口。这很好用;但是,当应用程序超时时MessageBox
处于打开状态时,消息框仍然存在。我希望能够关闭消息框或至少隐藏它。我已经查看了hwnds和hinstances,我不知道那是不是我想要做到这一点。我认为这很容易,因为我认为MessageBox
继承自Window,当然它并没有。最重要的是,你不能创建一个消息框实例来跟踪它。在这一点上,我不确定实际做什么或实际搜索什么。
我正在尝试使用反射来计算一些东西。我可以使用反射创建MessageBox
的实例,但不要认为我可以使用实例调用Show()。
答案 0 :(得分:1)
简答:只需创建一个看起来像消息框的窗口
答案很长:
消息框是正常的WinAPI窗口(它们具有HWND并且可以由本机API窗口函数操作)但是它们不是WPF窗口并且没有关联的Window对象。
由于它们是普通的窗口,你可以获得它们的HWND(使用FindWindow / FindWindowEx / EnumWindows)并将它们关闭(例如,通过模拟取消按钮点击)
但是,因为消息框的设计不是为了操作,所以这个技巧有一些令人讨厌的陷阱,你必须要处理。
而且,因为消息框非常简单,您可以轻松创建消息框克隆,所以更容易创建关闭,而不是处理所有消息框边角情况。