荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: michaelx (爱上了BBS), 信区: Program
标  题: 禁止屏幕保护的运行
发信站: 荔园晨风BBS站 (Mon Jul 23 21:58:47 2001), 转信

程序需要在一段时间里禁止屏幕保护的运行有两种方法
第一个方法是使用SystemParametersInfo 函数禁止屏幕保护和再次启用。
你需要在Form.OnCreate 里加入禁止部分,在Form.OnDestroy 里加入启用部分:
TMyForm = class(TForm)
...
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
...
end;
procedure TMyForm.FormCreate(Sender: TObject);
begin
...
//禁止屏幕保护
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
...
end;
procedure TMyForm.FormDestroy(Sender: TObject);
begin
...
//启用屏幕保护
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
...
end;
这种方法的问题是如果应用程序未接收OnDestroy 事件而由于其它的原因被关闭,屏幕
保护将不会再次被启用。
一个解决的方法是截取应用程序主窗体的WM_SYSCOMMAND:在激活屏幕保护之前,Windo
ws会向所有上层的窗口发送这条信息,它的wParam被设为SC_SCREENSAVE。如果你把这条
信息的返回值设为非零值,屏幕保护就不会开始。
如果你的应用程序由于不明的原因关闭,它就不会回应这条信息,屏幕保护就会如常运
行。
技术如下:
在窗体中这样声明一个信息处理器:
TMyForm = class(TForm)
...
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
...
end;
这样实现它:
procedure TMyForm.WMSysCommand(var Message: TWMSysCommand);
begin
if Chr(Message.Msg) = SC_SCREENSAVE then
Message.Result := 1
else
Inherited;
end;

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 203.93.19.1]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店