应用程序禁止Windows屏幕保护

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

澄城网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

  OnMessage事件的定义如下:

 
 
 
  1. typedefvoid__fastcall(__closure
  2. *TMessageEvent)(tagMSG&Msg,bool&Handled);
  3. __propertyTMessageEventOnMessage=
  4. {read=FOnMessage,write=FOnMessage};

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

 
 
 
  1. typedefstructtagMSG{
  2. HWNDhwnd;
  3. UINTmessage;
  4. WPARAMwParam;
  5. LPARAMlParam;
  6. DWORDtime;
  7. POINTpt;}

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

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

 
 
 
  1. classTForm1:publicTForm
  2. {
  3. __published:
  4. private:
  5. void__fastcallCaptureMessage(tagMSG&Msg,bool&Handled);
  6. public:
  7. __fastcallTForm1(TComponent*Owner);
  8. };

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

 
 
 
  1. void__fastcallTForm1::CaptureMessage(tagMSG&Msg,bool&Handled)
  2. {
  3. if(Msg.message==WM_SYSCOMMAND&&Msg.wParam==SC_SCREENSAVE)
  4. Handled=true;//阻止屏幕保护的启动
  5. else
  6. Handled=false;//进行该消息的缺省处理
  7. }

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

 
 
 
  1. void__fastcallTForm1::FormCreate(TObject*Sender)
  2. {
  3. Application->OnMessage=CaptureMessage;
  4. }

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

网站名称:应用程序禁止Windows屏幕保护
当前路径:http://www.hantingmc.com/qtweb/news16/522216.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联