我知道怎么做,之前我去过http://www.codeproject.com/KB/vb/VBFileAssociation.aspx。我的问题是关于做了什么,是否有可能扭转它?如果你不知道你的程序在哪里,你现在只是测试它会怎么样?有没有办法让它“找到”你的程序,或者一种简单的方法来编辑它的打开位置?就此而言,是否可以判断文件是否已经关联,尝试重新关联是一个问题吗?最后,如何设置它使用的.ico文件?
感谢您的帮助,我对注册表几乎一无所知,这让我感到困惑大声笑......
答案 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
子密钥来完成。