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



我有一个WPF应用程序,它需要在用户处于非活动状态5分钟后注销。

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

我试着使用;

Window window = Application.Current.MainWindow;

FocusManager.GetFocusedElement();

但无法实现对PrintDialog的访问并将其关闭

如果用户没有响应打印对话框,是否有任何方法可以访问并关闭它?

我使用解决了这个奇怪的问题

白色项目。http://white.codeplex.com/wikipage?title=Working%20with%20window&referringTitle=使用%20白色编程%20

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

  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();
        }
    }

您可以为此使用p/invoke。使用findwindow查找任何窗口,并销毁window关闭它。

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

如果我理解正确,你可以在5分钟时注销用户(我想是通过计时器事件处理程序),但如果打印对话框是打开的,那么打印输出仍然可能发生。

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

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

如果应用程序应该在没有当前用户的情况下继续运行,那么我认为White库是你的最佳选择。目前尚不清楚你为什么要放弃它。

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

相关内容

  • 没有找到相关文章

最新更新