将文件扩展名与程序相关联

时间:2009-10-12 20:48:28

标签: vb.net registry file-association

我知道怎么做,之前我去过http://www.codeproject.com/KB/vb/VBFileAssociation.aspx。我的问题是关于做了什么,是否有可能扭转它?如果你不知道你的程序在哪里,你现在只是测试它会怎么样?有没有办法让它“找到”你的程序,或者一种简单的方法来编辑它的打开位置?就此而言,是否可以判断文件是否已经关联,尝试重新关联是一个问题吗?最后,如何设置它使用的.ico文件?

感谢您的帮助,我对注册表几乎一无所知,这让我感到困惑大声笑......

1 个答案:

答案 0 :(得分:17)

为简洁起见,我使用的是假根密钥。在实践中,将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。对于我们的示例,使用记事本打开文件的动词将如下所示: Hive_Key\Software\Classes\ext_auto_file\shell\open\command,默认值为notepad.exe %1

这是您放置程序路径的地方。如果您的程序在系统PATH中,如notepad.exe所示,则不需要 来指定完整路径。在更可能的情况下,您需要指定exe的路径。出于测试目的,您可以将其设置为构建目录。

你问过如何检查这些东西,这可以通过首先检查扩展键的默认值来获取ProgID,然后检查ProgID键的shell子键以获取默认动词来完成。检查\shell\verb\command以获取启动程序的路径。

打开regedit.exe并浏览其他文件类型的注册表项可能会很有启发性,以便更好地了解它是如何工作的。

此外,如果特定扩展名不受控制面板中默认设置(默认程序)的程序控制,则上述内容均有效。您可以通过检查密钥HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Explorer\FileExts\.EXT\UserChoice是否存在来检查此状态。如果是,则需要在自定义生效之前撤消“默认程序”控件。这可以通过删除UserChoice子密钥来完成。