gpt4 book ai didi

c# - 防止 Windows 工作站(桌面)在运行 WPF 程序时锁定

转载 作者:IT王子 更新时间:2023-10-29 04:16:57 28 4
gpt4 key购买 nike

问题:
我有一个 WPF fullscreen应用程序,充当仪表板。计算机在域中,域策略强制计算机在最后一次用户事件后 10 分钟内锁定。我想防止工作站(或桌面)自动锁定。
这种行为的一个例子:Windows Media Player,它可以在电影播放时阻止这种情况。

已知解决方案(有点变通):

  1. 可以send a Win32 Mouse Move event每个固定的时间间隔(例如,每分钟)
  2. 可以每隔固定的时间间隔(例如,每分钟)向程序发送一个键(例如“Left Shift”键向上)

问题:
如何在不使用这些解决方法的情况下防止 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);
}
});

关于c# - 防止 Windows 工作站(桌面)在运行 WPF 程序时锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600627/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com