• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

在VC++中侦测Windows NT的屏幕保护状态

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 15次 | 进入软件测试论坛讨论

领测软件测试网 作者: 广东省深圳市温卫红陈耀光 (EwardChen@21cn.com)

   开发基于 Windows NT/2000的程序时,程序员往往需要知道系统是否处于屏幕保护状态,然后可以根据不同的状态在程序中做出相应的处理,如改变程序运行的优先级、先执行低优先级的例行工作等,以优化系统性能。微软公司在 Windows 2000操作系统中提供了 SystemParametersInfo() API函数,可以直接返回系统是否处于屏幕保护状态的信息,但是在 Windows NT中并没有提供,只能由程序员自己编程实现。

       在 Windows 3.x/9x操作系统上,可以用 API函数 FindWindow()来判断某个程序是否正在运行,对于屏幕保护程序也同样适用。但是此方法在 Windows NT上却无法实现,因为 Windows NT/2000操作系统屏幕保护的实现机制与 Windows 3.x/9x不一样,前者的屏幕保护程序是运行在操作系统为屏幕保护程序单独创建的 "虚拟桌面 "上,因此并不能在当前运行的 "用户桌面 "上找到屏幕保护程序。为此,找到屏幕保护程序的 "虚拟桌面 "成为解决问题的关键。下面给出利用 VC++编写侦测 Windows NT/2000是否处于屏幕保护状态的源代码。

# include

# include

# include

# include

BOOL IsScreenSaverRunning(void)

{

//定义一个 "虚拟桌面 "句柄

HDESK hDesktop;

hDesktop = OpenDesktop(

//操作系统分配给屏幕保护程序 "虚拟桌面 "的标识

TEXT(" screen- saver"),

0,

FALSE,

MAXIMUM_ALLOWED

);

if(hDesktop == NULL) {

//如果打开 "虚拟桌面 "失败

if(GetLastError()==ERROR_ACCESS_DENIED) /*如果是因为访问权限不足,则说明该 "虚拟桌面 "已经存在,只不过是我们的权限不足而已,此时可以判定系统正处于屏幕保护状态。* /

return TRUE;

//如果是其他的失败情况,则可以判定系统并不处于屏幕保护状态

return FALSE;

}

//如果 "虚拟桌面 "能成功打开,则可以判定系统正处于屏幕保护状态

//释放分配到的句柄资源

CloseDesktop(hDesktop);

return TRUE;

}

void main(void)

{

printf(" Detecting ScreenSaver by EdwardChen@21cn.com 2000.10\n");

while(1)

{

char curtime[8+ 1];

//每隔 1分钟侦测一次

if(IsScreenSaverRunning()) {

printf("% s Screen saver is running!\n",_strtime(curtime) );

}

else {

printf("% s Screen saver is NOT running!\n", _strtime(curtime) );

}

SleepEx(1000* 60, TRUE);

}

}

本程序在 Windows NT/2000上编译、运行通过。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网