将文件扩展名与程序关联

7
我知道如何做,之前我去过http://www.codeproject.com/KB/vb/VBFileAssociation.aspx。我的问题是关于这样做的作用,是否可以撤销?如果你不知道你的程序在哪里,并且现在只是在测试,有没有办法“找到”你的程序,或者轻松编辑打开它的方式?同样的,是否可能告诉文件是否已经关联,试图重新关联是否会有问题?最后,如何设置它使用的.ico文件?谢谢帮助,我对注册表几乎一无所知,它让我感到困惑lol...
1个回答

18

为了简洁起见,在实践中,将Hive_Key替换为系统默认设置的HKEY_LOCAL_MACHINE,或者使用每个用户的设置HKEY_CURRENT_USER。这些键都可以存在,也可以同时存在。如果两者都存在,则HKCU键具有优先权。

要将扩展名与文件类型关联,需要通过设置扩展名键(Hive_Key\Software\Classes\.ext)的默认值来选择文件类型,并设置默认键值。

实际启动的程序以及其他文件类型详细信息都可以在文件类型中找到。文件类型是通过所谓的ProgID(简称“编程标识符”,这是类标识符的更易读版本)来指定的。ProgID键位于Hive_Key\Software\Classes中,本示例的示例值可能是ext_auto_key

ProgID可能会有一个默认值,该默认值将是资源管理器中文件类型的友好描述(例如,“Microsoft Word文档”)。你需要确保选择一个对用户来说容易理解的描述。

ProgID可能有一个子键DefaultIcon,用于存储文件类型图标。该图标路径是该键的默认值。

ProgID键可能会有一个子键shell,其中包含文件上下文菜单项和此上下文菜单项调用的程序。与ProgID的默认值类似,动词键的默认值是在上下文菜单中显示的文本。这个shell键的默认值具有默认动词键名称,这是当用户双击文件时所调用的动词。

这些上下文菜单项是Verbs。对于我们的示例,打开记事本文件的动作会像这样:

使用默认值notepad.exe %1,在注册表路径Hive_Key\Software\Classes\ext_auto_file\shell\open\command中放置你的程序路径。如果你的程序已经在系统PATH中,例如notepad.exe,你不需要指定完整路径。但更多情况下,你需要指定exe文件的路径。为测试目的,你可以将其设置为生成目录。
要检查这些内容,首先检查扩展键的默认值以获取ProgID,然后检查ProgID键的shell子键以获取默认动词,最后检查\shell\verb\command以获取启动程序的路径。
打开regedit.exe并浏览其他文件类型的注册表键可能会更有启发性,帮助你更好地理解它们的工作原理。
此外,上述方法只适用于特定扩展名未被设为默认程序(控制面板的默认程序)的情况。你可以通过检查键HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.EXT\UserChoice是否存在来确定该状态。如果存在,则需要取消默认程序控制才能使自定义生效。这可以通过删除UserChoice子键来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接