网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文

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

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/08

鉴于大家对C/C++十分关注,我们编辑小组在此为大家搜集整理了“让应用程序禁止Windows屏幕保护”一文,供大家参考学习

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

  OnMessage事件的定义如下:

  typedef void__fastcall(__closure

  *TMessageEvent)(tagMSG amp;Msg,boolamp;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 amp;Msg,bool amp;Handled);

  public:

  __fastcall TForm1(TComponent* Owner);

  };

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

  void __fastcall TForm1::CaptureMessage(tagMSG amp;Msg,bool amp;Handled)

  {

  if(Msg.message= =WM_SYSCOMMAND amp;amp; Msg.wParam= =SC_SCREENSAVE)

  Handled=true; //阻止屏幕保护的启动

  else

  Handled=false; //进行该消息的缺省处理

  }

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

  void __fastcall TForm1::FormCreate(TObject *Sender)

  {

  Application-gt;OnMessage=CaptureMessage;

  }

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

  发送给应用程序的所有Windows消息(这当然不包括在程序中用SendMessage函数发送的消息)。

  OnMessage事件的定义如下:

  typedef void__fastcall(__closure

  *TMessageEvent)(tagMSG amp;Msg,boolamp;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 amp;Msg,bool amp;Handled);

  public:

  __fastcall TForm1(TComponent* Owner);

  };

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

  void __fastcall TForm1::CaptureMessage(tagMSG amp;Msg,bool amp;Handled)

  {

  if(Msg.message= =WM_SYSCOMMAND amp;amp; Msg.wParam= =SC_SCREENSAVE)

  Handled=true; //阻止屏幕保护的启动

  else

  Handled=false; //进行该消息的缺省处理

  }

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

  void __fastcall TForm1::FormCreate(TObject *Sender)

  {

  Application-gt;OnMessage=CaptureMessage;

  }

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

  • 上一篇资讯: 一个课堂打印案例分析
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号