美文网首页
应用在运行期间如何确保 Windows 不会进入屏保或锁屏

应用在运行期间如何确保 Windows 不会进入屏保或锁屏

作者: 我是柯南 | 来源:发表于2018-06-06 10:45 被阅读67次

最近在将 Sikuli 测试框架(基于 OpenCV 实现)集成到自动化测试平台中,我们的 Windows 10 测试机默认的组策略是 10 分钟无操作的话,自动进入屏保并锁屏,一旦锁屏,基于 Sikuli 的测试用例都无法正常执行,因为 Sikuli 的实现基础是图像识别。有两种方法可以确保测试机不进入屏保和锁屏。

1. 通过修改组策略

这种方式具有侵入性,破坏了原有测试机的状态,而且每次部署新的测试机需要更改组策略(Windows 为了安全考虑,组策略的更改没有 API 的方式可以代码实现,需要手动去做,所以基本不能自动化),不推荐。

2. 通过平台调用持续激活测试代理

在测试代理程序中加入以下平台调用模块,测试代理启动时,调用 Enable(),退出时调用 Disable()。

public class KeepRunningService
{
        [Flags]
        public enum EXECUTION_STATE : uint
        {
            ES_AWAYMODE_REQUIRED = 0x00000040,
            ES_CONTINUOUS = 0x80000000,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_SYSTEM_REQUIRED = 0x00000001
        }

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);

        public void Enable()
        {
            SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED
 | EXECUTION_STATE.ES_CONTINUOUS);
        }

        public void Disable()
        {
            SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
        }
}

相关文章

网友评论

      本文标题:应用在运行期间如何确保 Windows 不会进入屏保或锁屏

      本文链接:https://www.haomeiwen.com/subject/istbsftx.html