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

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

周新栋 (12/12/1999)

  ---- 如果在你的程序中需要一个很长的时间段来进行大量的数据处理,这段时间长得足以使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环境中运行通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++程序设计技巧 一些常用的VC程序设计技巧! 2000.11.4 混用两大 Application Framework VCL & MFC 使用WinInet类进行Internet编程 在C++ Builder3下实现程序自动运行的方法 让应用程序禁止Windows屏幕保护 巧妙保证程序只有一个实例打开 利用C++ Builder进行精确计 C++ Builder 中园形、三角形按钮的实现 ▲制作主窗口显示前的版权窗口 ▲怎样隐藏应用程序的任务条图标 ▲怎样启动一个程序而不显示它 ▲判断windows的Desktop及其它目录 ▲用C++Builder开发ISAPI扩展应用程序 ▲一种计算CD标识的算法 ▲在C++Builder中实现动画 用C++Builder创建数字签名 C++Builder4.0实现在线接收电子邮件 用BCB创建基于Internet的点对点Chat 用BCB在windows桌面创建快捷方式 程序中检测并调用缺省浏览器(VC) BIG5到GB的转换技术 在C++Builer中多线程的实现 用C++ Builder对图像进行特殊效果处理 C++ Builder与Matlab混合编程的实现 C++ BUILDER让任务栏图标动起来 拨号上网IP地址的检知 在C++ Builder中使用ActiveX控件显示Flash动画 用VC++6.0编写Proxy服务器 注册表的应用与事例(上) 注册表的应用与事例(下) C++Builder4.0实现在线接收电子邮件 控制远程计算机拨号上网并获取其IP地址 利用“侦听-转发”程序破译网管协议 如何防止Edit框中的Password不被非法获取) VC技巧01(共05则) VC技巧02(共05则) VC技巧03(共08则) VC技巧04(共08则) VC技巧05(共08则) VC技巧06(共08则) VC技巧07(共08则) VC技巧08(共08则) VC技巧09(共08则) VC技巧10(共11则) VC技巧11(共08则) VC技巧12(共05则) VC技巧13(共03则) VC技巧14(共03则) VC技巧15(共02则) VC技巧16(共03则) VC技巧17(共10则) VC技巧18(共03则) VC技巧19(共03则) VC技巧20(共02则) VC技巧21(共05则) VC技巧22(共04则) VC技巧23(共12则) VC技巧24(共04则) VC技巧25(共04则) VC技巧26(共06则) VC技巧27(共05则) VC技巧28(共02则) VC技巧29(共05则) VC技巧30(共05则)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值