注册表是Windows操作系统的信息存储中心,存放着包括计算机硬件配置、已安装软件的设置信息、当前用户的环境设置及某些文件类型与对其进行访问和操作的应用程序之间的联系等重要信息。Windows操作系统早期版本中存放在初始化文件(.ini)中的许多信息现在都存放在注册表中了。
我们开发的软件常常要建立具有独特数据格式的数据文件。作为一个专业化的商品软件,其安装程序有责任将其所用到的特殊格式的数据文件在注册表中进行注册,以使之和Windows操作系统更好地集成在一起,方便用户操作。
1.准备工作
1)请先在桌面空白处单击鼠标右键,在弹出菜单中选择“新建\文件夹”菜单项,并把“新建文件夹”重命名为“KAt81”,作为我们假设软件的工作目录。
2)在My_Edit文件夹上双击鼠标左键来打开该文件夹,在其窗口菜单中选择“文件\新建\文本文件”菜单项,或在其文件列表区域单击鼠标右键并在弹出菜单中选择“新建\文本文件”菜单项,把新创建的一个“新建 文本文件. txt”重命名为Test.KAt81。注意如果重命名前文件名中没有显示扩展名“.txt”,需要在窗口菜单中选择“查看\选项...”菜单项,在“选项”对话框中选择“查看”页,把“隐藏已登记的文件类型的MS-DOS文件扩展名”项改为不选状态。
3)打开“资源管理器”选择C:\Windows子目录下的Notepad.exe,按住Ctrl键将其拖到 KAt81文件夹中,并重命名为ETCV1.0.exe。
说明:现在,文件Test.KAt81的图标为带有Windows标志的缺省图标,文件类型为“KAT81文件”。在其文件名上双击鼠标左键将弹出“打开方式”对话框让用户选择与之相关联的应用程序(这里请勿进行任何操作即选择“取消 ”按钮关闭对话框)。在其文件名上单击鼠标右键弹出菜单中的第一项为“打开方式”而非通常的“打开”。“新建”菜单组中也没有有关该文件类型的选项。
2.在注册表中设置文件类型
(1)点击WIN+R组键,在弹出对话框中输入regedit并单击“确定”按钮启动注册表编辑器。
(2) 在根目录HKEY_CLASSES_ROOT下创建项,名称:.KAt81
1)在树形列表中选择主键HKEY_CLASSES_ROOT,单击鼠标右键并在弹出菜单中选择“新建\主键”,并把新建的主键名由“新项 #1”改为“.KAt81”。
2)在右边窗口中双击“(默认)”并在“键值”编辑框内输入MyEtcFile后单击“确定”按钮。
(3)在根目录HKEY_CLASSES_ROOT下创建项,名称:MyEtcFile
1)在树形列表中选择主键HKEY_CLASSES_ROOT,单击鼠标右键并在弹出菜单中选择“新建\主键 ”,并把新建的主键名由“新项 #1”改为“MyEtcFile”。
2)在右边窗口中双击“(默认)”并在“键值”编辑框内输入“ETC信息数据”后单击“确定”按钮。
(4)关闭注册表管理器。
(5)打开任务管理器,选择Windows资源管理器,如下图:
右键点击“重新启动”
文件类型变成了“ETC信息数据”
3.在注册表中设置文件图标
1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT\MyEtcFile,在其下创建DefaultIcon主键。
3)选择DefaultIcon,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“D:\我的文档\Desktop\KAt81\ETCV1.0.exe,0”后单击“确定”按钮。
4)关闭注册表管理器。
5)重启Windows资源管理器后,再打开Kat81文件夹,看到文件Test.KAt81的图标已被修改为记事本应用程序的图标。
说明:实际上,文件的图标是由其DefaultIcon键值决定的。键值分两部分,中间用逗号隔开。前面是包含图标资源的文件名,可以为一个应用程序、动态链接库或资源文件(.icon文件),后面是一个数字,正值表示图标在文件中的索引(从0开始),负值(加一个“-”号)表示图标的资源标识(它的名字)。如果是文件的第一个图标资源,可以省略逗号和数字。
将图标设置.ico图标文件,方法如下:
打开注册表,选择HKEY_CLASSES_ROOT\MyEtcFile\DefaultIcon,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“D:\我的文档\Desktop\KAt81\empty.ico”后单击“确定”按钮。
重启Windows资源管理器后,文件图标变化如下:
4.在右键菜单中添加“打开”和“打印”功能
1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT\MyEtcFile,在其下创建Shell主键。
3)在刚刚创建的Shell下创建Open主键,再在Open下创建Command主键。
4)选择Command,在右边窗口中双击“(默认)”并在“键值”编辑框内输入【"C:\Windows\notepad.exe" %1】后单击“确定”按钮。
5)回到Shell下,创建Print主键,再在Print下创建Command主键。
6)选择Command,在右边窗口中双击“(默认)”并在“键值”编辑框内输入“"C:\Windows\notepad.exe" /p %1”后单击“确定”按钮。
7)关闭注册表管理器。
说明:现在重新回到My_Edit文件夹,在文件名Test.KAt81上单击右键,弹出菜单中已没有了“打开方式”项而增加了“打开”和“打印”菜单项。单击“打开”将用ETCV1.0.exe打开Test.KAt81进行编辑,单击“打印”将把Test.KAt81送往默认打印机进行打印。各菜单项下主键Command的数据为此菜单项对应的操作命令,其中%1表示当前文件名。这里只建立了比较常用也是相对标准的“打开”和“打印”菜单项,按同样格式,我们也可以建立其他任何菜单项。
5.在桌面右键菜单中“新建”中添加“ETC数据文件”
1)打开注册表管理器。
2)在树形列表中选择HKEY_CLASSES_ROOT\.KAt81,在其下创建ShellNew主键。
3)选择ShellNew主键,在窗口菜单中选择“编辑\新建\串值”,并把新建的串值名称改为NullFile。
4)关闭注册表管理器。
说明:现在,请在“桌面”空白处单击右键,移动鼠标到“新建”菜单项,会看到其中已经新加了一项“ETC信息数据”,如下图所示。
选择该项就会在“桌面”上新建一个名为“新建 ETC信息数据.KAt81”的新文件,如下图所示。
其实,我们还可以通过在ShellNew主键下建立其他串值对新建的文件进行更多一些控制,这样的串值共有四个,它们是:
说明:现在,请在“桌面”空白处单击右键,移动鼠标到“新建”菜单项,会看到其中已经新加了一项“ETC信息数据”,选择该项就会在“桌面”上新建一个名为“新建 ETC信息数据.KAt81”的新文件。
其实,我们还可以通过在ShellNew主键下建立其他串值对新建的文件进行更多一些控制,这样的串值共有四个,它们是:
(1)NullFile:它的串值数据是 " ",用于创建一个空文件。若存在此项,则Data和FileName项将被忽略。
(2)Data:它的串值数据是binary_value,用于创建一个包含有二进制数据binary_value的新文件。若存在NullFIle或FileName项,此将被忽略。
注册表设置如下图。
点击新建/ETC信息数据后, 新建文件的内容,如下图:
(3)FileName:它的串值数据是path_name,用于生成一个由path_name所指定的文件的拷贝。若存在NullFIle项,此将被忽略。
(4)Command:它的串值数据是path_name,用于创建新文件后,执行path_name所指定的命令行。
设置如下图:
新建的ETC信息数据文件均为空文本,如下图所示。
至此,我们已经完成了基本的数据文件注册工作。需要说明的是,上述工作我们是通过手工操作完成的,在实际应用中应该由安装程序通过调用RegCreateKeyEx()和RegSetValueEx()等Win32 API函数自动完成,并在卸载程序中通过调用RegDeleteKey()等函数予以删除。应用程序的卸载信息注册在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall主键下面,可以在这里新建一个名为MyEdit的主键,除了“(默认)” 外再新建两个串值:DisplayName的数据指定一个在“控制面板”中的“添加/删除应用程序”对话框中显示的字符串,UninstallString的数据则指定运行卸载程序的命令行,包括路径、可执行文件名和所需的命令行参数。
另外,通过扩展Windows外壳(Shell)可以在某种类型文件的“属性”中添加新的属性页,这涉及到一些比较深入的编程技术,在此不予讨论。
参考资料:
文件和程序关联 (注册表) (360doc.com)