簡體   English   中英

防止Windows工作站(桌面)在運行WPF程序時鎖定

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

問題:
我有一個WPF 全屏應用程序,它充當儀表板。 計算機在域和域策略中強制計算機在最后一次用戶活動后10分鍾內被鎖定。 我想防止工作站(或桌面)自動鎖定。
此類行為的一個示例:Windows Media Player,可在電影運行時阻止此行為。

已知的解決方案(有點解決方法):

  1. 可以在每個固定的時間間隔(例如,每分鍾) 發送一次Win32 Mouse Move事件
  2. 可以在每個固定的時間間隔(例如,每分鍾)向程序發送一個鍵(例如“左移”鍵)。

題:
如何在不使用這些變通方法的情況下阻止Windows工作站鎖定?

免責聲明:
我很確定,在StackOverflow上應該有一個類似的問題得到解答,但我沒有發現任何問題。 如果你能指出我正確的方向,我將不勝感激。

通過評論已經指出了解決方案,但我為通過網絡搜索到達的其他人提供了一個簡單的入門解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM