保持对MessageBox的引用

本文关键字:引用 MessageBox | 更新日期: 2023-09-27 18:05:38

我试图隐藏我的应用程序的所有窗口时,用户会话时间。这很有效;但是,当应用程序超时时,当MessageBox保持打开状态时,消息框仍然存在。我希望能够关闭消息框或至少隐藏它。我已经查过了,我不知道这是不是我想要的。我认为这将是相当容易的,因为我认为MessageBox继承自窗口,当然它不是。最重要的是,您不能创建消息框的实例来跟踪它。在这一点上,我不确定实际要做什么或实际要搜索什么。

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

保持对MessageBox的引用

简短的回答:只需创建您自己的窗口,看起来像一个消息框

长答:

消息框是普通的WinAPI窗口(它们有HWND,可以被本地API窗口函数操作),但是它们不是WPF窗口,也没有关联的Window对象。

因为他们是正常的窗口,你可以得到他们的HWND(使用FindWindow/findwindowwex/EnumWindows)和欺骗他们关闭(例如,通过模拟取消按钮点击)

但是,由于消息框的设计不允许这样操作,所以这个技巧有一些令人讨厌的陷阱,您必须注意。

而且,因为消息框是如此简单,你可以很容易地创建一个消息框克隆,只是更容易创建关闭,而不是照顾所有的消息框的角落案例