如何在win2000中判断系统是否存在默认屏保?(50分)

  • 主题发起人 Caicheng
  • 开始时间
C

Caicheng

Unregistered / Unconfirmed
GUEST, unregistred user!
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,@b,0);<br><br>以上代码在win98中返回值正常,在win2000中,b总为true。<br><br>我要在win2000中判断是否有默认屏保,如果有就启动之,如果没有就启动自已的屏保,<br>但此代码总是返回 true,即系统已有默认屏保,我无法启动自己的屏保程序。<br><br>
 
我试了一下,2000下好象是有问题。不管是否有默认屏保,注册表中的ScreenSaveActive<br>都为1。<br>我想你可以这样做,读注册表中HKEY_CURRENT_USER/Control Panel/Desktop/下<br>的SCRNSAVE.EXE,如果SCRNSAVE.EXE存在就说明有默认屏保,反之就没有。
 
通过读取 System.ini 文件获得信息<br><br>Uses Inifiles, ShellApi; <br><br>procedure TForm1.Button1Click(Sender: TObject); <br><br>&nbsp; function GetLongFileName(Const FileName : String):String; <br>&nbsp; var <br>&nbsp; &nbsp; aInfo: TSHFileInfo; <br>&nbsp; begin <br>&nbsp; &nbsp; if SHGetFileInfo(PChar(FileName),0,aInfo,Sizeof(aInfo),SHGFI_DISPLAYNAME)&lt;&gt;0 then <br>&nbsp; &nbsp; &nbsp; &nbsp;Result:= String(aInfo.szDisplayName) <br>&nbsp; &nbsp; else <br>&nbsp; &nbsp; &nbsp; &nbsp;Result:= FileName; <br>&nbsp; end; <br><br>var <br>&nbsp; &nbsp;Ini:TInifile; <br>&nbsp; &nbsp;ScreenSaverFile:string; <br>begin <br>&nbsp; Ini:=TInifile.Create('system.ini'); <br>&nbsp; ScreenSaverFile:=GetLongFileName(Ini.ReadString('boot','SCRNSAVE.EXE','Not Available')); <br>&nbsp; Ini.Free; <br>&nbsp; ShowMessage(ScreenSaverFile); <br>end;
 
就是,2000下好象有问题啊。<br>procedure TForm1.N6Click(Sender: TObject);<br>var b:Integer;<br>begin<br>b:=1; //下面的语句,好象b的值根本没有改变???<br>SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,@b,0);<br>if b&lt;&gt;0 then //好象b的值根本没有改变???<br>begin<br>//PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);<br>showmessage('运行屏幕保护');<br>perform(WM_SYSCOMMAND,SC_SCREENSAVE ,0); // 启动屏幕保护程序<br>&nbsp;end else<br>&nbsp;begin<br>showmessage('没有默认屏幕保护');<br>SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0);<br>end<br>end;
 
我现在的办法是读注册表
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
975
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部