在Windows的活桌面中,文件夹的内容(即子文件夹和文件)被嵌入到HTML页面中显示。Windows资源管理器用右面的窗格显示文件夹内容,显示区域要比传统方式下小一些;更重要的是,活动桌面允许用户深入地控制和自定义资源管理器的右面窗格。
例如,图一显示了Win2K“我的电脑”文件夹的内容。活动桌面通过一个HTML页面显示文件夹的内容,HTML页面包含了一个显示子文件夹和文件的ActiveX控件。任何可以插入到HTML页面的部件,例如链接、表格、图片、控制按钮等,都可以插入到资源管理器的右面窗格。只要定制Windows资源管理器用来显示文件夹的HTML模板,就可以定制任意文件夹的外观和功能,利用简单的脚本代码,还可以让加入HTML模板的部件具有交互能力。

图一:“我的电脑”文件夹
这种定制既可以针对单个文件夹进行,也可以针对系统内所有的文件夹进行。如果要让某个文件夹具有某种特殊的功能,可以单独为它定制一个HTML模板;如果要让所有的文件夹具有某种特殊功能,则需要修改系统提供的标准HTML模板,即folder.htt文件。除了那些单独指定了定制模板的文件夹,Windows 将对所有的文件夹应用folder.htt HTML模板。
Windows 2000 默认为文件夹启用Web内容,但如果你不喜欢这项功能,可以禁止在资源管理器的右边窗格显示Web内容。方法是:在资源管理器中,选择菜单“工具/文件夹选项”,在“文件夹选项”中选择“常规”选项卡,在“Web视图”中选择“使用Windows传统风格的文件夹”,如图二所示。传统风格的视图类似于NT
4.0用来显示文件夹内容的视图。
图二:启用或禁用Web内容
如果启用了Web内容,活动桌面能够提供许多涉及到Web和HTML概念的功能,利用这些功能可以对Windows用户界面的许多方面进行深入定制,包括当鼠标停留时显示的提示信息、快速启动工具条、文件夹的图标以及文件夹的内容。
一、定制提示信息
当鼠标停留在文件或快捷方式上时,系统能够显示出关于该快捷方式或文件的提示信息。要对这些提示信息进行完全的控制只能通过C++COM对象实现,但通过Windows脚本宿主和脚本代码,也能对快捷方式和文件的提示信息进行一定程度的控制。
图三:MyShortcut快捷方式
快捷方式的提示信息。定制快捷方式的提示信息其实很简单。假设要为快捷方式MyShortcut定制图三所示的提示信息,实现代码如下所示。把这些代码保存为扩展名为.vbs的脚本文件,双击执行即可。代码首先创建了一个WshShell对象的实例,然后用该对象的CreateShortcut方法创建WshShortcut对象,在WshShortcut对象的TargetPath属性中指定快捷方式的指向(这里是C:盘的根目录),再通过Description属性设置提示信息(即“这个快捷方式指向C:\”)。最后,用WshShortcut对象的Save方法保存快捷方式。运行这个脚本之后,当鼠标停留在MyShortcurt快捷方式上时,Windows就会显示出相应的提示信息。
Set shell = CreateObject("WScript.Shell")
Set lnk = shell.CreateShortcut("myshortcut.lnk")
lnk.TargetPath = "c:\"
lnk.Description = "这个快捷方式指向C:\"
lnk.Save
文件提示信息:除非为文件指定了特殊的提示信息,否则,Windows根据文件的类型显示标准提示信息。默认情况下,Windows显示的文件提示信息通过连接文件的类型(也就是资源管理器“类型”列的信息)、作者、标题、主题、注释和大小等信息得到。所有的文件都有类型和大小信息,但作者、标题或注释等信息就不一定所有文件都有了。当Windows准备显示某个文件的提示信息时,它会提取出所有有效的信息,并忽略该文件不提供的各项信息。
定制文件的提示信息有两种办法。第一种办法是编写一个C++ COM对象,在C++ COM对象中实现IQueryInfo
COM接口。然而,这种方法要求熟悉C++和COM开发,对于大多数脚本编写者来说,这是不切实际的。一种更实际的办法是,利用类如下面所示的脚本代码在注册表中设置一个提示字符串。从实用的角度讲,提示信息应当简短、明确。
Set shell = CreateObject("WScript.Shell")
fileClsName = shell.RegRead("HKCR\.htm\")
shell.RegWrite "HKCR\" & fileClsName & "\Infotip", "这是一个ASP页面", "REG_SZ"
二、定制快速启动工具条
通过WSH可以用编程的方式把快捷方式加入到“快速启动”工具条。快速启动工具条上所有的内容都以快捷方式的形式保存在Application Data 系统文件夹下,具体的路径与用户名称有关。例如,如果用户以Administrator名称登录Windows 2000,则路径是\Documents and Settings\Administrator\Application Data。在这个文件夹下,\Microsoft\Internet Explorer\Quick Launch子目录保存了快速启动工具条的快捷方式。因此,要向快速启动工具条加入链接,只需在这个目录下加入快捷方式。
例如,假设要把记事本加入到快速启动工具条,则脚本代码可以如下所示。代码首先创建了一个WshShell对象,这个对象的SpecialFolders能够提取出指定的Windows系统目录,这里我们想要提取的是Application
Data文件夹的路径,因此指定了AppData作为参数。把SpecialFolders返回的路径和\Microsoft\InternetExplorer\Quick Launch子目录连接起来,接着,用WshShell对象的CreateShortcut方法创建一个WshShortcut对象的实例。最后,设置WshShortcut对象的目标路径和描述信息,并调用save保存所作修改。
Set shell = CreateObject("WScript.Shell")
appDir = shell.SpecialFolders("AppData")
lnkPath = appDir & "\Microsoft\Internet Explorer\Quick Launch"
Set lnk = shell.CreateShortcut(lnkPath & "\notepad.lnk")
lnk.TargetPath = "notepad.exe"
lnk.Description = "启动记事本"
lnk.Save
三、定制文件夹的图标
为了便于在资源管理器中寻找文件夹,可以为文件夹加上定制的图标和说明。这个操作分两步:
开启文件夹的只读属性。这可以通过脚本代码进行,也可以通过文件夹的“属性”对话框手工进行。启用只读属性之后,Windows资源管理器将把第二步创建的.ini文件视为一个具有特殊含义的文件。
在文件夹下创建名为desktop.ini的系统文本文件。该文件可以用记事本创建,如图四所示。IConFile指向一个包含图标的文件,这个文件可以是.ico文件,也可以是在资源部分包含图标的可执行模块(例如.exe、.dll、.drv、ocx文件)。如果使用来自.ico文件的图标,则在IconIndex中指定目标图标的位置序号,位置序号从0开始计算(即0表示第一个图标,1表示第二个图标,依此类推);如果使用来自执行模块的图标,则把IconIndex设置成从0开始计算的位置序号,或设置成图标的ID编号。图标的ID编号由编写代码模块的人设定,因此ID编号必须从代码模块的文档寻找。指定图标的ID编号时,ID编号前面必须加上连字符“-”。这个连字符指示系统用ID编号的绝对值装入图标。
图四:desktop.ini文件
四、定制文件夹内容
要定制资源管理器右窗格文件夹的内容,在文件夹内空白区域(不是显示文件的保留区域)右击,从菜单选择“自定义文件夹”。自定义文件夹向导引导用户设置或修改HTML模板,改变文件夹及其文件的显示方式,或者修改背景,或者修改文件夹的注释。如果选择了修改HTML模板,向导显示出标准的HTML模板。可以用记事本修改标准模板的源代码。
例如,假设要在标准HTML模板的基础上增加一个指向中文Yahoo的链接。首先,找到下面这行代码:
Info.innerHTML = text;
这行代码在JavaScript函数ShowInfo()之内。然后,用下面的代码替换上面这行代码:
var s = "Yahoo中文
"Info.innerHTML = s + text;
编辑和修改文件夹的HTML模板可以随时进行。folder.htt在文件夹的Folder Settings子目录下。Folder
Settings目录默认是隐藏的,要查看这个文件夹,必须在“文件夹选项”对话框的“查看”选项卡下,取消“隐藏受保护的操作系统文件”选项。
图五:修改默认的PersistMoniker设置
“自定义文件夹向导”运行结束后,文件夹下面会出现一个desktop.ini文件。要使用定制的HTML模板,可以修改PersistMoniker。例如,假设我们有一个定制的HTML模板users.htt,则可以把图五突出显示的内容改为:
PersistMoniker=file://users.htt
HTML模板基本上就是一个HTML页面。除了文件扩展名不同之外,HTML模板和HTML页面的区别在于,当Windows 2000的浏览器(IE5.0或以上)处理HTML模板时,它会自动地寻找和解释三个环境变量:%THISDIRPATH%,%THISDIRNAME%,%TEMPLATEDIR%。IE浏览器把这三个环境变量分别解释成当前文件夹的完整路径名、当前文件夹的名称、指向标准HTML模板的系统路径。例如,要在HTML模板中显示当前文件夹的名称,只需指定:当前文件夹的名称是:"%THISDIRNAME%"
编写定制HTML模板时,有两点必须注意。
首先,只要有可能,应当让模板文件自包含。HTML文件能够引入外部文件,例如脚本代码或CSS样式定义。但对于HTML模板,最好把所有要引用的脚本代码和CSS样式定义尽可能地放入同一个模板文件,这样有助于提高操作系统访问模板的效率。由于.htt文件内不能嵌入图片和ActiveX控件,因此最好少用,以便提高显示文件夹内容的速度。
第二,定制HTML模板可能完全地隐藏文件夹的实际内容。也就是说,除非预先采取了特别的措施,否则,要查看文件夹内容的唯一办法就是禁用所有文件夹的“Web视图”选项。因此,最好在HTML模板中提供一个机制,使得用户能够方便地在标准视图和定制视图之间切换。
下面来看一个例子。假设文件夹下面包含了一些XML文件,这些XML文件用来描述某个应用的用户信息。现在我们希望双击打开文件夹时就能够立即看到以表格的方式显示的XML文件内容,不需要再次点击XML文件。下面显示了XML文件的一个例子users.xml: ......
按照前面的说明,在desktop.ini内修改PersistMoniker,使其指向定制模板users.htt。下面是users.htt定制模板的完整代码:
当前的文件夹是:%THISDIRNAME%
标准方式 --------------------------------------------------------------------------------
style=display:none
classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
在users.htt中,两个链接“标准方式”和“表格方式”指向VBScript脚本函数Toggle。Toggle函数利用动态HTML技术(DHTML)实现标准视图和定制视图的切换。图五和图六显示出了users.htt模板的实际效果。
图六:users.htt的定制视图
图七:users.htt标准视图
活动桌面包含了许多定制Windows用户界面的实用功能。只有对用户界面进行深入地定制,才能充分发挥活动桌面的强大功能,更高效地完成日常工作,更轻松、方便地访问所需信息。
|