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

最近在将 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);
        }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,615评论 8 265
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,014评论 3 119
  • 编写和维护复杂的Javascipt代码,必须使用模块化策略。目前,业界的主流做法是采用"面向对象编程"。因此,Ja...
    戈志刚阅读 667评论 0 0
  • 你永远无权决定别人的生活,过好你自己的生活! 所以,终是开卷有益。即便不与人交往,沉浸在阅读里的时光,那是沉寂的时...
    兒东Y波阅读 198评论 0 0