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

时间:2008-11-25 02:39:24

标签: windows registry file-association

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

我尝试添加一些注册表项,将.jpg个文件与我的程序相关联,例如HKEY_CLASSES_ROOT\.jpg\shell\open\command(将其值设置为"myProgram.exe" "%1")和HKEY_CLASSES_ROOT\myProgram

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

2 个答案:

答案 0 :(得分:2)

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

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""

答案 1 :(得分:0)

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

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

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

开始时间reading documentation