在VC++中侦测Windows NT的屏幕保护状态
来源:互联网 发布:疾风js好还是统御js好 编辑:程序博客网 时间:2024/05/20 00:16
在VC++中侦测Windows NT的屏幕保护状态
www.educity.cn 发表者:greatship 发表日期:2013年10月30日 文章评论 发表文章
开发基于 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 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上编译、运行通过。
www.educity.cn 发表者:greatship 发表日期:2013年10月30日 文章评论 发表文章
开发基于 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 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上编译、运行通过。
0 0
- 在VC++中侦测Windows NT的屏幕保护状态
- 在VC++中侦测Windows NT的屏幕保护状态
- VC:让应用程序禁止Windows屏幕保护
- VC 实现屏幕保护
- 如何在Windows NT中隐藏自己
- 在注册表中禁止屏幕保护
- VC编程进行windows NT 服务程序的创建,删除,启动,停止 【NT Service编程】
- 在Windows NT IIS环境中 php连接oracle配置的一些步骤的总结
- 如何在Windows NT中隐藏自己[转]
- 如何在Windows NT中隐藏自己[转]
- 如何在Windows NT中以编程方式管理用户权限
- Android L及其以上版本中Launcher应用侦测应用状态变化的方式
- VC中窗口在屏幕中央显示
- Windows NT的版本
- windows NT的安全性
- 异类的屏幕保护
- 异类的屏幕保护
- 介绍Windows侦测遍历Usb设备(PID&VID)及相应其插拔状态的方法
- GetDlgItem与GetDlgCtrlID的比较
- Mybatis注解学习--xxxMapper is not known to the MapperRegistry
- “我”和“你”——从短信交流中的署名谈起 2014.04.09
- 设计模式学习之——六大设计原则之一:单一职责原则
- Cannot truncate table 'xxx' because there are one or more isolation level 0 scans, or REO
- 在VC++中侦测Windows NT的屏幕保护状态
- can't create TCP/IP socket 10106
- Core Bluetooth for iOS 6
- java switch/case你不知道的事情
- 网站建设要注意网站内部结构
- linux中apt-cache命令的用法
- javascript事件
- Android Application对象必须掌握的七点
- 地址数据常用表