大凡用PC看VCD的同仁都有这样的体会:正看在兴头上,屏幕却突然漆黑一片棗原来是屏幕保护兴风作浪。想不要屏幕保护,又舍不得它的绚丽多彩,每次看VCD之前去控制面板设定一番,又觉得Windows的设定程序启动烦琐,并且由于读取大量无用(与取消屏保无关)的数据,十分费神。在下深受其害,终于某天忍受不住,拿起武器,制作了一个有关屏幕保护的VB程序,在此供大家参考。大家“录用”本程序后,在桌面上建立一个快捷方式,以后每次看VCD之前,顺手启动之,就可免受屏保程序之苦了。
首先,咱们了解一下屏保信息存放在哪儿。Windows下的屏幕保护程序具体是哪个程序的信息存放在Systen.ini文件中。虽然大部分的System.ini在Windows 95上转移至注册表中,但本项却仍然在老的ini文件。但奇怪的是有关屏保启动的间隔时间(也就是设定系统中多长时间没有任何诸如键盘击键、鼠标移动等输入事件发生就启动屏保)却存于系统注册表里,位置为“HKCU\Control Panel\DeskTop\ScreenSaveTimeOut”,字符串值,以秒为单位,如时间为3分,则此值为 180。修改以上值可以重新设定屏保。
其次,要了解如何处理以上值。我们当然不想手动去调节以上值,我们应当用计算机语言作为我们的手段,CFAN的理想语言应当是VB(声明:不是替微软做广告)。存取system.ini可以使用VB的Line Input语句;访问注册表可以利用系统提供的有关COM对象的功能,具体见下面的程序。
好了,现在可以动手了
建立工程
启动VB,选择 Standar EXE。然后保存工程名为Ssaver,接着添加两个Label控件、两个TextBox控件、四个CommButton控件、一个CommonDialog控件。Text1用于显示接受屏保程序名,Text2 用于显示当前屏保的间隔时间。两个Label控件分别提示TextBox控件的作用。四个CommonButton的Caption分别为“确认“、“取消屏保并退出”、“取消”、“浏览… ”,从标题大家应该可以看出各自的作用,在此不做赘述。CommonDialog的作用是浏览系统中的屏保程序,并选择加入至Text1中。
设定控件属性,添加代码
除了以上所述的Caption属性外。还应当对CommonDialog的属性进行设定:DialogTitle设为“浏览屏幕保护程序”, Filter设为“*.src|*.src|*.exe|*.exe”(因为Windows95中任何程序都可设置成屏幕保护程序),将InitDir设为“c:\windows\system”。
现在来加入有关代码。双击Form1,在Form_Load()中加入以下代码,以初始化相关控件:
Dim TextLine As String
Dim i As Long
Open "c:\windows\system.ini" For Input As #1 ‘打开System.ini
Do While Not EOF(1) 利用循环搜索System.ini中内容
Line Input #1, TextLine 读出一行
i = InStr(1, TextLine, "SCRNSAVE.EXE=", 1)
If i > 0 Then Text1.Text = Right(TextLine, Len(TextLine) - Len("SCRNSAVE.EXE=")) ‘I >0,表明找到”SCRNSAVE.EXE=”
Exit Do ‘退出循环搜索
End If
Loop
Close #1 关闭文件
Dim WSHShell As Object
Set WSHShell = CreateObject("WScript.Shell") ‘建立一个COM对象,利用此COM对象的接口来读写注册表,WScript.Shell是Windows98自带的解释VBScript语言的COM对象。
Text2.Text = WSHShell.RegRead("HKCU\Control Panel\DeskTop\ScreenSaveTimeOut") ‘利用WScript.Shell对象提供的方法来读取相应注册表项,并显示在Text2中
双击Command1,在Command1_Click()中输入代码:
WritePrivateProfileString "boot", "SCRNSAVE.EXE", Text1.Text, "c:\windows\system.ini" ‘利用WinAPI来修改System.ini
Dim WSHShell As Object
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKCU\Control Panel\DeskTop\ScreenSaveTimeOut", Text2.Text
End
要注意用到了WinAPI,故需要启动Api Text Vier,将WritePrivateProfileString的声明拷至VB中,并在前加入Private关键字。
双击Command2,在Command2_Click()中加入:
WritePrivateProfileString "boot", "SCRNSAVE.EXE", "", "c:\windows\system.ini" ‘取消屏保即将屏保项设定为空串
End ‘退出
双击Command3,在Command3_Click()中加入:End
双击Command4,在Command3_Click()中加入:
CommonDialog1.ShowOpen ‘显示对话框,寻找屏保程序
If Not IsEmpty(CommonDialog1.filename) Then
Text1.Text = CommonDialog1.filename‘显示查找并选定的屏保程序名
End If
运行并编译程序
首先,运行此程序,通过后编译为Exe文件。现在可以为此程序在桌面上建立一个快捷方式。以后,每次启动VCD播放软件前,启动该快捷方式,可以进行时间的设定乃至取消屏保。现在,安心看VCD吧。
如果觉得这样还有些让人担心,因为有时总忘记先启动屏保设定在开启VCD播放,可以编写一个批处理,且给批处理在桌面上建立一个快捷方式,并删除桌面上的诸如VCD播放之类的快捷方式棗现在应该不必担心记性不好了。此快捷方式应当设定“退出时关闭“。批处理内容可以这样:
d:\vb\ssaver.exe ‘自编的屏保设定程序
c:\sthvcd\sthvcd.exe ‘超级解霸
好了,关掉VB去看VCD吧,从此不必遭受紧要关头被打断的痛苦了!