WPF访问打开的打印对话框并关闭它们

时间:2013-06-24 18:08:16

标签: c# wpf printdialog

我有一个WPF应用程序,需要在5分钟不活动后注销用户。

但是如果用户打开任何页面的打印对话框,并且不触摸屏幕5分钟, 即使我注销用户并清除所有子元素,打印对话框仍然保留在WPF表单的顶部,并且有人可以继续打印页面用户留下的内容。

我试图使用;

Window window = Application.Current.MainWindow;

FocusManager.GetFocusedElement();

但无法访问PrintDialog并关闭它。

如果用户没有回复打印对话框,有没有办法访问它并关闭?

3 个答案:

答案 0 :(得分:4)

我使用

解决了这个奇怪的问题

白色项目。 http://white.codeplex.com/wikipage?title=Working%20with%20window&referringTitle=Programming%20using%20white

通过使用应用程序类,我可以访问WPF项目中的所有ModalDialog,并关闭它们。

  Application application = White.Core.Application.Attach(Process.GetCurrentProcess().Id);

private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        White.Core.UIItems.WindowItems.Window window = application.GetWindow("MainWindow");
        List<White.Core.UIItems.WindowItems.Window> modalWindows = window.ModalWindows();
        foreach (White.Core.UIItems.WindowItems.Window modalWindow in modalWindows)
        {
            modalWindow.Close();
        }
    }

答案 1 :(得分:1)

您可以使用p / invoke。 使用findwindow查找任何窗口,使用destroywindow关闭它。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx

答案 2 :(得分:0)

如果我理解正确,您可以在5分钟标记处进行用户注销(我通过计时器事件处理程序设定),但如果打印对话框已打开,则打印输出仍然可能最终发生

问题是,这里真正重要的是什么,关闭对话框或阻止后续打印输出?你是在注销用户但保持程序运行,还是退出程序?

如果应用程序应该关闭,那么您的代码可以调用Application对象的 Shutdown()方法,该方法将关闭任何模式对话框作为关闭过程的一部分。< / p>

如果应用程序应该在没有当前用户的情况下继续运行,那么我认为 White 库是您最好的选择。目前还不清楚你为什么要离开这个。

无论是否关闭打印对话框,打印代码都应检查用户是否在实际打印之前仍然登录。如果在屏幕上显示打印对话框时登录过期,则打印代码应该直接退出而不打印任何内容。