如何将应用程序设置为以编程方式打开某种types的文件的默认程序?

有一个从我的程序在MFC中生成的可执行文件,我想用它作为打开.jpg文件的默认程序。 也就是说,每次我双击一个.jpg文件,我的程序就会运行。

我尝试添加一些连接.jpg文件与我的程序,如HKEY_CLASSES_ROOT\.jpg\shell\open\command (将其值设置为"myProgram.exe" "%1" )和HKEY_CLASSES_ROOT\myProgram

该方法工作得很好,除非其他应用程序注册自己打开.jpg文件。 例如,我在我的电脑上安装了acdSee,所以每次点击一个.jpg文件时,它总是启动acdSee而不是我自己的程序。 但是当我用我的程序注册一个全新的文件types时,它可以在程序中打开。 我不知道如何设置我的程序作为一个已经注册的文件的默认打开程序以编程方式。 任何人都可以帮我解决这个问题吗? 非常感谢你!

Solutions Collecting From Web of "如何将应用程序设置为以编程方式打开某种types的文件的默认程序?"

更典型/标准的做法是将“.jpg”键的默认值设置为更清楚地标识文件类型的名称,然后在那里设置各种相关的操作。 所以对于jpg,你可以这样做:

 HKCR\.jpg @default = MyApp.JpegImage HKCR\MyApp.JpegImage\shell\open\command @default = "myApp.exe "%1"" 

如果其他程序决定注册该类型,则会使用其他值替换HKCR.jpg的默认值,如OtherProgram.Jpg。 此时,您可以通过将值重新设置为MyApp.JpegImage将其重新注册到您的应用程序。

免责声明:在进行此类更改时,请尽量尊重用户的偏好。 例如,在安装你的应用程序时,给用户选择设置这个文件关联或者不设置它。 如果用户希望这样做,您也可以从已安装的应用程序中提供一个命令来重置关联。

如果您不想将某些附加命令添加到现有的注册类型,则可以读取.jpg键的默认值以查找文件类型的名称。 然后,您可以打开该键,并将操作添加到现有的一组操作中。 例如,您可以添加以下内容:

 HKCR\ExistingApp.JpegImage\shell\myopen\ @default = "Open with MyApp" HKCR\ExistingApp.JpegImage\shell\myopen\command\ @default = "myApp.exe "%1"" 

请注意,通过给HKCR写一个密钥,实际上是写给HKLM \ Software \ Classes。 这将需要管理权限。 但是,您可以通过将密钥写入HKCU \ Classes \ Root来改变用户上下文中的每个用户的更改。

此外,HKCU中的用户首选项将覆盖HKLM中的系统默认值,这听起来像是您的问题所在。

这是程序没有将扩展名注册为“默认”(程序是否在“控制面板”的“设置程序和默认值”中列出)

开始阅读文档的时间!