7

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

感谢您的帮助,我对注册表几乎一无所知,这让我很困惑哈哈......

4

1 回答 1

18

为简洁起见,我使用的是假根密钥。在实践中,替换Hive_KeyHKEY_LOCAL_MACHINE系统默认设置或HKEY_CURRENT_USER每个用户设置。允许这些键中的任何一个存在,或两者都存在。如果它们都存在,则HKCU密钥优先。

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

在文件类型中可以找到实际启动的程序以及其他文件类型的详细信息。文件类型由所谓的 a ProgID(“Programmatic Identifier”的缩写,它是类标识符的更易于阅读的版本)来标记。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,然后检查shellProgID 键的子键以获取默认动词,然后检查\shell\verb\command以获取程序的路径来完成推出。

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

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

于 2009-10-12T23:12:39.167 回答