阻止屏保运行、显示器和系统待机

简介: 原文 http://blog.csdn.net/zjerryj/article/details/4618485    暴风影音在播放的时候会阻止屏幕保护程序的运行,并会防止系统关闭显示器和进入待机状态。

原文 http://blog.csdn.net/zjerryj/article/details/4618485

   暴风影音在播放的时候会阻止屏幕保护程序的运行,并会防止系统关闭显示器和进入待机状态。以下就是用C#来实现这个功能。

1、阻止屏幕保护程序的运行

    基本原理是播放时调用Windows API函数SystemParametersInfo()来关闭屏幕保护程序,播放结束后再重新打开。代码如下:

[c-sharp] view plain copy
  1. //定义API函数  
  2. [DllImport("user32.dll")]  
  3. static extern bool SystemParametersInfo(uint uiAction, bool uiParam, ref bool pvParam, uint fWinIni);  
  4. const uint SPI_GETSCREENSAVEACTIVE = 0x0010;  
  5. const uint SPI_SETSCREENSAVEACTIVE = 0x0011;  
  6. const uint SPIF_SENDCHANGE = 0x0002;  
  7. const uint SPIF_SENDWININICHANGE = SPIF_SENDCHANGE;  
  8. //调用,其中函数内的false才是起作用的设置,active变量是在读取设置的时候使用的,这里没有实际意义。  
  9. bool active = false;  
  10. SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, falseref active, SPIF_SENDWININICHANGE);  



    C#调用Windows API还是很方便的,只是数据类型转换会比较麻烦,不过用得多了也就熟悉了。
    另外有一种情况是原本屏幕保护程序并没有打开。这可以通过SPI_GETSCREENSAVEACTIVE来获取最初的配置,最后还原即可。
    当然,要实现这个功能还有其他方法,比如窗体应用程序可以重写Form.WndProc()方法来截获系统消息SC_SCREENSAVE来终止屏保,或者用Windows Hook(钩子)技术来截获消息等。

2、防止系统关闭显示器或进入待机状态

    同样是调用Windows API函数,SetThreadExecutionState()。该函数可以重置系统的闲置时间(IdleTime),但是不能阻止屏保的运行。代码如下:

[c-sharp] view plain copy
  1. //定义API函数  
  2. [DllImport("kernel32.dll")]  
  3. static extern uint SetThreadExecutionState(uint esFlags);  
  4. const uint ES_SYSTEM_REQUIRED = 0x00000001;  
  5. const uint ES_DISPLAY_REQUIRED = 0x00000002;  
  6. const uint ES_CONTINUOUS = 0x80000000;  
  7. //播放时调用  
  8. SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);  
  9. //播放结束后调用  
  10. SetThreadExecutionState(ES_CONTINUOUS);  



    或者可以用一个System.Timers.Timer来定时调用SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED),看个人喜好吧。

    以上函数的具体用法可以参考MSDN。WindowsAPI真的很神奇,值得日后好好研究。

目录
相关文章
|
存储 SQL JSON
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
1890 0
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
|
4月前
|
数据采集 存储 NoSQL
Python爬虫Cookie管理最佳实践:存储、清理与轮换
Python爬虫Cookie管理最佳实践:存储、清理与轮换
|
数据采集 Web App开发 JavaScript
爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集
本文介绍了在Python中使用DrissionPage库和Auth代理Chrome插件抓取163新闻网站数据的方法。针对许多爬虫框架不支持代理认证的问题,文章提出了通过代码生成包含认证信息的Chrome插件来配置代理。示例代码展示了如何创建插件并利用DrissionPage进行网页自动化,成功访问需要代理的网站并打印页面标题。该方法有效解决了代理认证难题,提高了爬虫的效率和安全性,适用于各种需要代理认证的网页数据采集。
912 0
爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集
|
存储 安全 调度
深入探索:在std::thread中创建并管理QEventLoop的全面指南(二)
深入探索:在std::thread中创建并管理QEventLoop的全面指南
647 2
|
资源调度 前端开发
vue3.2最新语法如何使用socket.io实现即时通讯
vue3.2最新语法如何使用socket.io实现即时通讯
241 3
uniapp 添加自定义图标
uniapp 添加自定义图标
519 0
|
算法 安全 数据处理
【C++ 编程范式】理解C++ 中编程范式,选择合适的方式
【C++ 编程范式】理解C++ 中编程范式,选择合适的方式
491 2
|
前端开发 Java 程序员
【JAVA】<GUI编程>AWT & Swing 图形化编程库
【1月更文挑战第19天】【JAVA】<GUI编程>AWT & Swing 图形化编程库
|
存储 SQL 关系型数据库
探索数据库的世界:DB、DBMS、DBA、DBS的全面介绍
探索数据库的世界:DB、DBMS、DBA、DBS的全面介绍
1873 0
|
机器学习/深度学习 算法 计算机视觉
openpose的一些个人理解
一直都是在做一些目标检测的研究工作,近期开始看一些有关姿态检测的内容,其中最经典的就是openpose这个框架,后面很多动作识别、姿态检测也大多是在该网络上进行改进,比如Real-time 2D Multi-Person Pose Estimation on CPU 这篇论文,在原OpenPose基础上进行了轻量处理,我也用这代码跑了一下,效果也不错。
711 0
openpose的一些个人理解