4

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

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

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

4

2 回答 2

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""
于 2008-11-25T03:25:30.857 回答
0

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

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

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

是时候开始阅读文档了

于 2008-11-25T04:46:59.227 回答