RSS
热门关键字:
当前位置 : 主页>嵌入式开发>VxWorks>列表

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

来源:我要研发网 作者: 时间:1970-01-01 点击:



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


  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,则这个消息将不会得到进一步处理,在本例中就是取消屏幕保护程序激活。 字串2

  启动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事件处理器中:

字串7



void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application-$#@62;OnMessage=CaptureMessage;
}

  按F9编译并运行程序,你可以事先将屏幕保护等待时间设为一个尽可能小值来检验程序运行情况。你会发现在程序运行期间,屏幕保护程序将无法被激活,关闭运行程序后再等待一会儿,屏幕保护程序就会正常出现。以上代码在C Builder3、win98环境中运行通过。
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章