2008-11-25 129 views
4

在MFC中有从我的程序生成的可执行文件,我想用它作为默认程序打开.jpg文件。也就是说,每次我双击一个.jpg文件,我的程序就会运行。如何将应用程序设置为以编程方式打开特定类型文件的默认程序?

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

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

+0

重新标记 - 删除了“C++”标记,因为这与应用程序碰巧写入的语言无关。添加了窗口,因为注册表条目具有很高的平台特定性。 – 2008-11-25 03:50:43

+0

好的。非常感谢你 – user26404 2008-11-25 10:02:47

回答

2

执行此操作的更典型/标准方法是将“.jpg”键的默认值设置为更清晰地标识文件类型的名称,然后在其中设置各种关联的操作。因此,对于JPG格式,你可以这样做:

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

如果一些其他程序决定注册类型,他们将与其他一些值,比如OtherProgram.Jpg更换为HKCR.jpg的默认值。此时,您可以通过将值重新设置为MyApp.JpegImage将其重新注册到您的应用程序。

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

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

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

对不起。我已经完成了你所说的一切。但是问题依然存在...... – user26404 2008-11-25 08:58:16

0

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

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

这是当一个程序还没有注册的扩展为“默认”(在控制面板中设置程序和默认值列出的程序?)

时候开始reading documentation

相关问题