让应用程序禁止Windows屏幕保护

如果在你的程序中需要一个很长的时间段来进行大量的数据处理,这段时间长得足以使Windows因检测不到用户动作而激活屏幕保护程序,一旦启动了屏幕保护程序,你的程序运行实际上就变慢了,这会大大影响程序的正常运行。有没有一种方法,使程序在进行长时间的数据处理前关掉屏幕保护呢?答案是肯定的。Windows在启动屏幕保护程序前会向当前激活的应用程序发送WM_SYSCOMMAND消息,其中wParam参数指定了即将执行的系统命令类型,在本例中其值为SC_SCREENSAVE。问题在于程序如何捕获这个消息呢?在C++ Builder中可以利用TApplication类的OnMessage事件句柄来处理这个消息。应用程序在接收到任何Windows消息后都会触发TApplication类的OnMessage事件,通过定义这个事件的处理程序,可以捕获发送给应用程序的所有Windows消息(这当然不包括在程序中用SendMessage函数发送的消息)。

OnMessage事件的定义如下:

typedef void__fastcall(__closure *TMessageEvent)(tagMSG &Msg,bool&Handled);

__property TMessageEvent OnMessage={read=FOnMessage,write=FOnMessage};

其中TMessageEvent类型是OnMessage事件的类型,它定义了处理消息的方法,Msg参数给出了Windows消息的相关信息,其结构如下:

typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}

Handled参数决定了如何对消息进行下一步处理,如果在接收到一个消息后将Handled参数设为true,则这个消息将不会得到进一步的处理,在本例中就是取消屏幕保护程序的激活。

启动C++ Builder,新建一工程文件,在头文件中的Private段增加对成员函数CaptureMessage的声明:

class TForm1 : public TForm
{
__published:   
private:   
void __fastcall CaptureMessage(tagMSG &Msg,bool &Handled);
public:     
__fastcall TForm1(TComponent* Owner);
};

在.cpp文件中增加CaptureMessage的定义:

void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled)
{
if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE)
Handled=true; //阻止屏幕保护的启动
else
Handled=false; //进行该消息的缺省处理
}

再将定义好的CaptureMessage函数作为OnMessage事件的事件处理器,将以下代码加到主窗体的OnCreate事件处理器中:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage=CaptureMessage;
}

按F9编译并运行程序,你可以事先将屏幕保护的等待时间设为一个尽可能小的值来检验程序的运行情况。你会发现在程序运行期间,屏幕保护程序将无法被激活,关闭运行的程序后再等待一会儿,屏幕保护程序就会正常出现。以上代码在C++ Builder3、win98环境中运行通过。

时间: 2024-09-17 03:40:49

让应用程序禁止Windows屏幕保护的相关文章

Delphi开发98屏幕保护预览程序

大家都知道windows屏幕保护程序的作用,而且新的屏幕保护程序越来越漂亮.如果在win98的桌面右键菜单选属性,就弹出显示器设置界面,有一个标签是设置屏幕保护程序的. 在该页的画面上,有一个显示器图案,如果你选择win98所带的屏幕保护程序,这个屏幕保护程序就会在这个小'显示器'上自动运行,你可以直接看到运行效果.这功能大大方便了屏幕保护程序的选择,这就是win98对屏幕保护程序的新增接口:预览功能. 目前大多数新推出的屏幕保护程序都支持这个接口. 屏幕保护程序从它的诞生那时起,在同一时刻只能

Windows8系统中使用屏幕保护程序的方法

如何使用屏幕保护程序 屏幕保护程序是移动的图片或图案,当你在特定的一段时间内没有使用鼠标或键盘后,这些图片或图案即会出现在计算机的屏幕上. 屏幕保护程序是个性化电脑的一种绝好方式.下面是可在 Windows 中处理屏幕保护程序的几项任务: 打开屏幕保护程序 当你打开屏幕保护程序时,它将被添加到未保存的主题. 有关详细信息,请参阅 主题入门. 通过以下方式打开"屏幕保护程序设置":从屏幕的右边缘向中间轻扫,点击"搜索"(如果使用鼠标,则指向屏幕的右上角,然后将指针向下

Win8如何设置恢复屏幕保护程序不提示输入密码

Win8恢复屏幕保护程序设置不提示密码输入的方法如下: 一般Windows屏幕保护程序默认在恢复时,不会提示输入登录密码,需手动设置在屏保恢复时显示登录信息. 方法一: 1.正常登录Windows 8系统后出现的应用界面,需将鼠标指向屏幕左下角待出现"桌面"缩略图后单击进入桌面. 2.进入"桌面"后,在桌面空白处单击右键,点"个性化". 3.点击"个性化"后出现如下界面. 4.在上述界面点"屏幕保护程序",

Win8中使用屏幕保护程序技巧

  屏幕保护程序从XP到现在的Win8一直都是非常重要又很能体现个性化的一个功能,这篇文档详细说明了各种使用屏幕保护程序的办法. 如何使用屏幕保护程序 屏幕保护程序是移动的图片或图案,当你在特定的一段时间内没有使用鼠标或键盘后,这些图片或图案即会出现在计算机的屏幕上. 屏幕保护程序是个性化电脑的一种绝好方式. (Win8之家:Win8e.com)下面是可在 Windows 中处理屏幕保护程序的几项任务: 打开屏幕保护程序 当你打开屏幕保护程序时,它将被添加到未保存的主题. 通过以下方式打开"屏幕

用vbs实现配置无人登录计算机时使用的屏幕保护程序_vbs

问: 您好,脚本专家!我最近下载了你们的"脚本中心"屏幕保护程序,当有人登录计算机时,它运行起来棒极了.但是无人登录时,计算机却使用其它屏幕保护程序.如何让计算机在无人登录时也使用"脚本中心"屏幕保护程序? -- RF 答: 您好,RF.您知道,我们遇到过这种情况,您可能在设法欺骗这些老脚本专家们.举个例子来说,我们怎么知道您希望无人登录计算机时运行的屏幕保护程序就是我们的屏幕保护程序?也许您只是奉承脚本专家,好让脚本专家回答您的问题.回答完问题后,您就会把我们甩掉

《精通Android 5 多媒体开发》——第22章,第22.1节屏幕保护程序介绍

22.1 屏幕保护程序介绍精通Android 5 多媒体开发屏幕保护设计的初衷是为了防止电脑因无人操作而使显示器长时间显示同一个画面,导致老化而缩短显示器寿命.另外,虽然屏幕保护并不是专门为省电而设计的,但一般Windows下的屏幕保护程序都比较暗,大幅度降低屏幕亮度,有一定的省电作用.现行显示器分为两种--CRT显示器和LCD显示器,屏幕保护程序对两种显示器有不同影响. 22.1.1 屏幕保护程序的作用屏幕保护主要有如下3个作用. (1)保护显象管. 由于长时间静止的Windows画面会让CR

用vbs记录屏幕保护程序的开始时间和结束时间_vbs

问: 您好,脚本专家!如何记录屏幕保护程序的开始时间和结束时间? -- JS 答: 您好,JS.您知道,一位脚本专家(嘿,谁说"肯定是 Greg"?)年纪大得记得屏幕保护程序刚出现的日子.那时,这类脚本毫无意义.毕竟,屏幕保护程序启动后,每个人都神魂颠倒,从未想过让它结束.事实上,作为计算机支持人员的这位脚本专家首先必须做的一件事就是在每个人的桌面上创建快捷方式,使他们能够随时启动"飞转的小烤炉". 那时人们很容易得到快乐. 啊,但是活在过去没有意义,对吧?在今天的

win7怎么设置屏幕保护

  随着win7系统不断成熟发展,越来越多用户升级安装win7系统,很多用户习惯xp系统屏保,更换win7系统之后却没有屏幕保护,屏幕设置屏保能够更好保护电脑不受损耗,新手用户该怎么设置屏幕保护呢?下面小编分享详细操作方法. 1.在电脑桌面点击鼠标右键,弹出菜单; 2.选择"个性化",进入控制面板的个性化界面破解Windows屏保密码; 3.选择右下角的"屏幕保护程序",进入屏幕保护程序设置; 4.选择适合自己的屏幕保护程序,点击"应用",选择&

关闭或打开win7屏幕保护的操作方法

  1.在桌面的空白处,单击鼠标右键选择个性化选项; 2.在个性化页面中,选择点击屏幕保护程序; 3.在弹出的屏幕保护程序设置中将屏幕保护程序中的选项改为无,点击确定应用.