保留对MessageBox的引用?

时间:2015-07-29 19:52:49

标签: c# wpf messagebox

当用户会话时间结束时,我试图隐藏应用的所有窗口。这很好用;但是,当应用程序超时时MessageBox处于打开状态时,消息框仍然存在。我希望能够关闭消息框或至少隐藏它。我已经查看了hwnds和hinstances,我不知道那是不是我想要做到这一点。我认为这很容易,因为我认为MessageBox继承自Window,当然它并没有。最重要的是,你不能创建一个消息框实例来跟踪它。在这一点上,我不确定实际做什么或实际搜索什么。

我正在尝试使用反射来计算一些东西。我可以使用反射创建MessageBox的实例,但不要认为我可以使用实例调用Show()。

1 个答案:

答案 0 :(得分:1)

简答:只需创建一个看起来像消息框的窗口

答案很长:

消息框是正常的WinAPI窗口(它们具有HWND并且可以由本机API窗口函数操作)但是它们不是WPF窗口并且没有关联的Window对象。

由于它们是普通的窗口,你可以获得它们的HWND(使用FindWindow / FindWindowEx / EnumWindows)并将它们关闭(例如,通过模拟取消按钮点击)

但是,因为消息框的设计不是为了操作,所以这个技巧有一些令人讨厌的陷阱,你必须要处理。

而且,因为消息框非常简单,您可以轻松创建消息框克隆,所以更容易创建关闭,而不是处理所有消息框边角情况。