闪存,也可以“自动播放”
IT商界
笔者曾听说过硬盘也能“自动运行”的稀奇事,百思不得其解──我运行硬盘干嘛?后经高手指点才知道,所谓的“自动运行”与“自动播放”是两个概念,前者指在资源管理器打开驱动器时运行程序,后者指移动储存器插入系统时运行程序,虽然都与AutoRun.inf文件大有干系,但两者之功用相去甚远 。那么本文为了不再混淆视听,当取“自动播放”之意,我们今天就让闪存真正AutoRun。
一、自动播放的原理
闪存以其方便易用、容量适中的特点,轻易挤掉了移动储存家族的软盘兄弟,也从光盘老大哥的容量死角中抢占了一部分媒体储存、商务演示、多媒体课件、软件发布(内部软件)的任务。相信许多人都对闪存的自动播放很感兴趣,以MP3型闪存为例,如果它也能像CD一样在电脑中自动播放,无疑是很具诱惑的,再设想有朝一日插入闪存时自动播放全屏Flash或其他课件,更是让人垂涎三尺。
事实上,简单地设置一下AutoRun.inf文件,并不能实现移动储存器插入时的自动播放(包括光盘)。光盘之所以能够自动播放,还因为有驱动程序的支持,但闪存作为USB设备的新秀,显然还没有享受到这种“待遇”。
既然驱动程序没有这个功能,就发场我们的DIY精神自己实现。只要随时监测闪存的状态,当有闪存插入时,再根据规定寻找AutoRun.inf文件,读取AutoRun.inf文件的配置,决定是否运行以及运行哪个程序就行了。
二、闪存自动播放之脚本实现
如果你没有编程环境也不用急,程序以Windows脚本实现。将以下代码输入到记事本,随便保存到哪个目录(建议就保存到桌面),文件名为“闪存自动播放(安装).vbs”,然后双击运行,如果你不打算再研究它了,提示“成功安装”后即可将桌面的文件删除(脚本程序已经自动复制到系统目录,并设置了注册表)。
Dim bReady,bInsert
bReady=False
bInsert=False
set oFSO=createObject("Scripting.FileSystemOb ject")
set oDrive = oFSO.GetDrive("H")
do while true
IF bReady<>oDrive.isready and bReady=False Then
bInsert=True
bReady=True
Else
bInsert=False
bReady=oDrive.isReady
End if
IF bReady=True and bInsert=True then
Msgbox "闪存已经准备好"
End If
wscript.sleep 1000
loop
sub AutoRun(DiskName)
if oFso.GetDrive(DiskName).isReady then
if oFso.FileExists(DiskName & "\AutoRun.inf") then
end if
end if
end su
整个脚本程序不算很复杂,但它的确能够自动运行AutoRun.inf配置文件指定的程序。
三、注意事项
由于本程序完全使用脚本完成,读者对此可能还有一些疑问,笔者选一些自己也曾考虑过的情况进行简单说明,并提出几点忠告:
1.“频繁”地状态检查会损坏闪存吗?这是一个值得讨论的问题,笔者给你的回答是:用于软盘则相当于软驱“杀手”,但闪存绝不会被损坏。究其原因是闪存与软盘的驱动机制不同,实际上状态检查并不会直接读取闪存本身,次数也不多,完全不用担心影响闪存寿命。
2.脚本程序像EXE可执行程序一样,也可能被病毒感染,因此当你杀毒时最好经常去“照料”一下脚本所在的目录。
3.闪存第一次在某台机器使用时,一般情况下会自动安装这个脚本,如果不是你本人的机器,请务必向机器主人说明,避免给别人造成麻烦或误解。
4.另外,如果你使用的是Windows 2000/XP/2003操作系统,最好按正确的方法“弹出”闪存,然后再从接口拔出。