我们开发的软件常常要建立具有独特数据格式的数据文件。作为一个专业化的商品软件,其安装程序有责任将其所用到的特殊格式的数据文件在注册表中进行注册,以使之和Windows操作系统更好地集成在一起,方便用户操作。
下面,我们就以举例的形式详细介绍如何在注册表中对数据文件进行注册。这里假设软件的可执行文件为MyEdi t.exe,其实质为Windows附件中记事本应用程序Notepad.exe的拷贝(在C:/ Windows目录下),并假设MyEdit所用的数据文件的扩展名为.met。
1.准备工作
1)请先在桌面空白处单击鼠标右键,在弹出菜单中选择“新建/文件夹”菜单项,并把“新建文件夹”重命名为“ My_Edit”,作为我们假设软件的工作目录。
2)在My_Edit文件夹上双击鼠标左键来打开该文件夹,在其窗口菜单中选择“文件/新建/文本文件”菜单项,或在其文件列表区域单击鼠标右键并在弹出菜单中选择“新建/文本文件”菜单项,把新创建的一个“新建文本文件.t xt”重命名为Test.met。注意如果重命名前文件名中没有显示扩展名“.txt”,需要在窗口菜单中选择“查看 /选项...”菜单项,在“选项”对话框中选择“查看”页,把“隐藏已登记的文件类型的MS-DOS文件扩展名”项改为不选状态。
3)打开“资源管理器”选择C:/Windows子目录下的Notepad.exe,按住Ctrl键将其拖到 My_Edit文件夹中,并重命名为MyEdit.exe。
说明:现在,文件Test.met的图标为带有Windows标志的缺省图标,文件类型为“MET文件”。在其文件名上双击鼠标左键将弹出“打开方式”对话框让用户选择与之相关联的应用程序(这里请勿进行任何操作即选择“取消 ”按钮关闭对话框)。在其文件名上单击鼠标右键弹出菜单中的第一项为“打开方式”而非通常的“打开”。“新建”菜单组中也没有有关该文件类型的选项。(图1)
2.注册文件类型
1)在“开始”菜单中选择“运行...”菜单项,在对话框中输入Regedit并单击“确定”按钮启动注册表 编辑器。
2)在树形列表中选择主键HKEY_CLASSES_ROOT,单击鼠标右键并在弹出菜单中选择“新建/主键 ”,并把新建的主键名由“New Key#1”改为“.met”。
3)在右边窗口中双击“(默认)”并在“键值”编辑框内输入My_Edit_Data_File后单击“确定 ”按钮。
4)重复2)操作,只是在最后把新建的主键名改为3)中的输入值My_Edit_Data_File。
5)在右边窗口中双击“(默认)”并在“键值”编辑框内输入“MyEdit数据文件”后单击“确定”按钮。
6)关闭注册表管理器。
再次打开My_Edit文件夹(如果已经打开,请按F5键以更新显示信息),我们看到文件Test.met的类型已被注册为前面设定的“MyEdit数据文件”。
3.注册文件图标
1)重复注册文件类型的步骤1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT/ My_Edit_Data_File(各主键是按字母顺序排列的),在其下创建DefaultIcon主键。
3)选择DefaultIcon,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“C:/ Wind ows/ Desktop/ My_Edit/ MyEdit.exe,0”后单击“确定”按钮。
4)关闭注册表管理器。
说明:我们再回到My_Edit文件夹(如果已经打开,请按F5键以更新显示信息),看到文件Test.me t的图标已被修改为记事本应用程序的图标。实际上,文件的图标是由其DefaultIcon键值决定的。键值分两部分,中间用逗号隔开。前面是包含图标资源的文件名,可以为一个应用程序、动态链接库或资源文件,后面是一个数字,正值表示图标在文件中的索引(从0开始),负值表示图标的资源标识。如果是文件的第一个图标资源,可以省略逗号和数字。
4.注册弹出菜单项
1)重复注册文件类型的步骤1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT/ My_Edit_Data_File(各主键是按字母顺序排列的),在其下创建Shell主键。
3)在刚刚创建的Shell下创建Open主键,再在Open下创建Command主键。
4)选择Command,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“C:/ Windows/ Desktop/ My_Edit/ MyEdit.exe%1”后单击“确定”按钮。
5)回到Shell下,创建Print主键,再在Print下创建Command主键。
6)选择Command,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“C:/Windows/D esktop/My_Edit/MyEdit.exe/p%1”后单击“确定”按钮。
7)关闭注册表管理器。
说明:现在重新回到My_Edit文件夹,在文件名Test.met上单击右键,弹出菜单中已没有了“打开方式”项而增加了“打开”和“打印”菜单项(图2)。单击“打开”将用MyEdit.exe打开Test.met进行编辑,单击“打印”将把Test.met送往默认打印机进行打印。各菜单项下主键Command的数据为此菜单项对应的操作命令,其中%1表示当前文件名。这里只建立了比较常用也是相对标准的“打开”和“打印”菜单项,按同样格式,我们也可以建立其他任何菜单项。
5.在“新建”菜单组中添加数据文件
1)重复注册文件类型的步骤1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT /.met,在其下创建ShellNew主键。
3)选择ShellNew主键,在窗口菜单中选择“编辑/新建/串值”,并把新建的串值名称改为NullFi le。
4)关闭注册表管理器。
说明:现在,请在“桌面”空白处单击右键,移动鼠标到“新建”菜单项,会看到其中已经新加了一项“MyEdi t数据文件”(图3),选择该项就会在“桌面”上新建一个名为“新建 MyEdit数据文件.met”的新文件。其实,我们还可以通过在ShellNew主键下建立其他串值对新建的文件进行更多一些控制,这样的串值共有四个,它们是:
(1)NullFile:它的串值数据是"",用于创建一个空文件。若存在此项,则Data和FileNam e项将被忽略。
(2)Data:它的串值数据是binary_value,用于创建一个包含有二进制数据binary_va lue的新文件。若存在NullFIle或FileName项,此将被忽略。
(3)FileName:它的串值数据是path_name,用于生成一个由path_name所指定的文件 的拷贝。若存在NullFIle项,此将被忽略。
(4)Command:它的串值数据是path_name,用于创建新文件后,执行path_name所指定的命令行。
至此,我们已经完成了基本的数据文件注册工作。需要说明的是,上述工作我们是通过手工操作完成的,在实际应用 中应该由安装程序通过调用RegCreateKeyEx()和RegSetValueEx()等Win32 API函数自动完成,并在卸载程序中通过调用RegDeleteKey()等函数予以删除。应用程序的卸载信息注册在HKEY _LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / Curre ntVersion / Uninstall主键下面,可以在这里新建一个名为MyEdit的主键,除了“(默认)” 外再新建两个串值:DisplayName的数据指定一个在“控制面板”中的“添加/删除应用程序”对话框中显示的字符串,UninstallString的数据则指定运行卸载程序的命令行,包括路径、可执行文件名和所需的命令行参数。
另外,通过扩展Windows外壳(Shell)可以在某种类型文件的“属性”中添加新的属性页,这涉及到一些比较深入的编程技术,在此不予讨论。