【问题标题】:How to set an application as the default program of opening a certain type of file programmatically?如何将应用程序设置为以编程方式打开某种类型文件的默认程序?
【发布时间】:2008-11-25 02:39:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows registry file-association


    【解决方案1】:

    执行此操作的更典型/标准的方法是将“.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""
    

    【讨论】:

      【解决方案2】:

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

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

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

      开始reading documentation

      【讨论】:

      • 对不起,我什至在我的注册表中找不到 HKCU\Classes\Root 的任何键。
      • @user26404 我认为你应该写信给 HKCU\Software\Classes。如果 HKCR 的系统范围设置映射到 HKLM\Software\Classes,则每个用户设置应映射到 HKCU\Software\Classes。我认为 Factor Mystic 打错了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2021-02-03
      • 2015-09-21
      • 2013-01-13
      • 1970-01-01
      相关资源
      最近更新 更多