问题:
我有一个WPF 全屏应用程序,它充当仪表板。 计算机处于域和域策略,强制计算机在最后一次用户活动后10分钟内被locking。 我想防止工作站(或桌面)自动locking。
这种行为的例子:Windows Media Player,在电影运行时阻止这种行为。
已知的解决scheme(有点解决方法):
题:
如何防止Windows工作站locking而不使用这些解决方法?
免责声明:
我很确定,应该有一个类似的问题在StackOverflow的某个地方回答,但我没有find任何。 如果你能把我指向正确的方向,我将不胜感激。
已经通过评论指出了解决方案,但是我为通过网络搜索到达的其他人提供了一个简单的入门解决方案:
/// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); public App() { InitializeComponent(); App.Current.Startup += new StartupEventHandler((sender, e) => { SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS); }); App.Current.Exit += new ExitEventHandler((sender, e) => { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS); }); } } [FlagsAttribute] public enum EXECUTION_STATE : uint { ES_AWAYMODE_REQUIRED = 0x00000040, ES_CONTINUOUS = 0x80000000, ES_DISPLAY_REQUIRED = 0x00000002, ES_SYSTEM_REQUIRED = 0x00000001 // Legacy flag, should not be used. // ES_USER_PRESENT = 0x00000004 }
放置逻辑的另一个地方是在主应用程序窗口的StateChanged
事件处理程序中:
this.StateChanged += new EventHandler((sender, e) => { if (WindowState == System.Windows.WindowState.Maximized) { SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS); } else { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS); } });