C# 锁定PC前调用SetThreadExecutionState

C# 锁定PC前调用SetThreadExecutionState,c#,kernel32,C#,Kernel32,我有一个程序,当用户锁定和解锁他们的计算机时,它甚至会触发。我添加了一个功能,可通过调用以下代码,在用户需要时保持电脑处于唤醒和解锁状态: private void changeUnlockState() { uint status = NativeMethods.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED); //Call ex state m

我有一个程序,当用户锁定和解锁他们的计算机时,它甚至会触发。我添加了一个功能,可通过调用以下代码,在用户需要时保持电脑处于唤醒和解锁状态:

private void changeUnlockState()
{
    uint status = NativeMethods.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED);    //Call ex state method with correct flags
    if (status == 0)
    {
        couldNotChangeStateError();
    }
}

internal static class NativeMethods
{
    [DllImport("kernel32.dll")]
    public static extern uint SetThreadExecutionState(EXECUTION_STATE esFlags);
}

[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
}
当程序首次启动(因此计算机无法锁定)时,调用函数
changeUnlockState
;当用户锁定计算机以允许屏幕进入睡眠时,调用函数;当用户解锁以恢复由于不活动而不锁定计算机时,调用函数


最初它似乎工作正常,但在计算机被锁定和解锁后就无法工作了。是否自动重置此参数?我已经查看了,但是我找不到任何关于如果手动锁定计算机会发生什么的信息(除了它不会覆盖用户输入)。我应该只在解锁时调用change state函数,还是根本不调用?

Hmm,这根本不应该起作用。它最多只能防止屏幕保护程序弹出,但不能防止工作站锁定。嗯,我的鼠标非常敏感,可能是我不小心撞到了桌子,以为它没有锁定。有什么方法可以防止工作站锁定吗?除了用鼠标移动一个像素外:P这也是我的想法来源: