Prevent Windows workstation (desktop) from locking while running a WPF program

前端 未结 1 450
隐瞒了意图╮
隐瞒了意图╮ 2020-12-23 14:28

Issue:
I have a WPF fullscreen application, which acts as a dashboard. The computer is in domain and domain policies enforce the computer to be locked i

相关标签:
1条回答
  • 2020-12-23 15:05

    The solution has been pointed out through the comments, but I'm providing a simple starter solution for anyone else arriving via a web search:

    /// <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
    }
    

    An alternative place to put the logic would be within an event handler for StateChanged on your main application window:

    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);
            }
        });
    
    0 讨论(0)
提交回复
热议问题