我有一个WPF应用程序,需要在5分钟不活动后注销用户。
但是如果用户打开任何页面的打印对话框,并且不触摸屏幕5分钟, 即使我注销用户并清除所有子元素,打印对话框仍然保留在WPF表单的顶部,并且有人可以继续打印页面用户留下的内容。
我试图使用;
Window window = Application.Current.MainWindow;
或
FocusManager.GetFocusedElement();
但无法访问PrintDialog并关闭它。
如果用户没有回复打印对话框,有没有办法访问它并关闭?
答案 0 :(得分:4)
我使用
解决了这个奇怪的问题通过使用应用程序类,我可以访问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 库是您最好的选择。目前还不清楚你为什么要离开这个。
无论是否关闭打印对话框,打印代码都应检查用户是否在实际打印之前仍然登录。如果在屏幕上显示打印对话框时登录过期,则打印代码应该直接退出而不打印任何内容。