论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言实例:让应用程序禁止Windows屏幕保护

文章类别:C语言程序设计 | 发表日期:2011-4-14 10:43:11

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 &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环境中运行通过。

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058