最近看了下电脑管家里面修复漏洞时阻止系统进入待机模式的实现,其实很简单,哈哈。可以看一下这个MSDN上对这个API的说明:http://msdn.microsoft.com/en-us/library/aa373208(v=vs.85).aspx

以下是转载

-----------------------------------------------------------------------------------------------

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

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

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

  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, false, ref active, SPIF_SENDWININICHANGE);

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

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

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

  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真的很神奇,值得日后好好研究。

http://blog.csdn.net/magictong/article/details/6560634

阻止屏保运行、显示器和系统待机(使用SystemParametersInfo和SetThreadExecutionState两种办法)的更多相关文章

  1. Windows和Ubuntu双系统,修复UEFI引导的两种办法

    查看ubuntu是否是从 efi/uefi 启动的方法:  若 /sys/firmware/efi 存在则是,否则不是.shell命令: [ -d /sys/firmware/efi ] && ...

  2. C#实现阻止关闭显示器和系统待机

    原文http://www.cnblogs.com/TianFang/archive/2012/10/12/2721883.html 最近写了一个下载程序,发现有一个问题:挂机下载的时候,下载任务会因为 ...

  3. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

    在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...

  4. Android中实现全屏、无标题栏的两种办法

    在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...

  5. win7系统不能用telnet命令的两种解决方法

    电脑专业人员对telnet命令都不陌生了,Telnet当成一种通信协议,在日常工作中,经常面对网络问题的人都会用到telnet命令,因为简单有效,可以帮助更快的找出问题.要是在使用过程中碰到win7纯 ...

  6. 取消Debian屏保及显示器休眠

    在产品展示场合,屏保及休眠会带来不好的体验,很多时候需要关闭掉. dpms显示器休眠设置: 开启:$ sudo xset dpms 1 1 2取消:$ sudo xset -dpms xset设置屏保 ...

  7. linux系统的磁盘空间限制的两种方法

    最近在搞VPS,要用到磁盘的限额,在网上找了一些相关的资料,总结起来,有两个方法能实现,一是用quota,另外一种是限制目录大小,下面我就将这两种方法写出来,与大家一起分享! 首先我们来看第一种方法, ...

  8. Oozie与Coordinator调度讲解及系统时区配置与定时触发两种配置方式

    1:修改本地linux时区 查看时区 - 号代表西  + 号 代表东 北京时间是东八区 设置时区的配置文件所在位置 cd /usr/share/zoneinfo/ 选择以亚洲的上海 的时区为基址 删除 ...

  9. 实现手机端上下左右滑屏的jq原生代码和使用库·两种办法

    先来一个原生的.我使用的是jq. 需要注意的地方就是被触发的元素最好不要是body,这个代码也可以修改,如果obj传进来的是body那么,$(this)必须是你的监听元素,不然会冒泡泡,整个项目就…… ...

随机推荐

  1. 【23.15%】【codeforces 703C】Chris and Road

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. 【39.77%】【codeforces 724B】Batch Sort

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. Spring 的 ApplicationEvent and ApplicationListener

    什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环境,可是理解成容器会更好些. ApplicationContext则是应用的容器. Sprin ...

  4. 在嵌入式程序中QT去掉鼠标指针

    在像arm的QT编程当中,一般都是使用触摸来操作,当是我们运行程序的时候会发现总是有个鼠标箭头在那里,下面介绍种方法将其给去掉.这样就漂亮多了.在main()函数加入 #include <QWS ...

  5. sklearn 文本处理

    from sklearn.feature_extraction.text import ** 1. 向量的统计.tf-idf 的计算 考虑如下预料,三行 ⇒ 三个文档,不重复的单词共有 8 个, co ...

  6. nginx 502错 failed (13: Permission denied)

    安装nginx和php-fpm之后出现502错误 找了个理由说php-fpm不启动 ,但在我的实践中,该过程开始 找了半天没找到病因.视图nginx记录后 我发现下面的错误 [crit] 2686#0 ...

  7. UVA10940 - Throwing cards away II(找到规律)

    UVA10940 - Throwing cards away II(找规律) 题目链接 题目大意:桌上有n张牌,依照1-n的顺序从上到下,每次进行将第一张牌丢掉,然后把第二张放到这叠牌的最后.重复进行 ...

  8. SQList3 and SQL入门学习笔记

    SQL 这是一个标准的计算机语言进行访问和操作数据库. 什么是 SQL? ·       SQL 指结构化查询语言 ·       SQL 使我们有能力訪问数据库 ·       SQL 是一种 AN ...

  9. Python第一个基本教程4章 词典: 当指数不工作时也

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "copyri ...

  10. 【Linux知识】server性能测试--UnixBench

    链接地址: http://blog.csdn.net/jason_asia/article/details/38309079 1.1.   server性能测试UnixBench 分别DELL R72 ...