如何将C#应用程序设置为特定文件类型的默认程序?

9

我的应用程序中有一个图片框。当我在Windows中打开一张图片时,想要使用我的应用程序来显示图片,而不是默认的程序。需要让包含图片框的程序显示该图片。

4个回答

12

最近我做了这件事,不过我使用了一个不同的操作,而不是默认的Open操作。

首先你要找到某个扩展名的文件类型,比如 .jpg:

var imgKey = Registry.ClassesRoot.OpenSubKey(".jpg")
var imgType = key.GetValue("");

然后您需要找出可执行文件的路径并构建"命令字符串":

String myExecutable = Assembly.GetEntryAssembly().Location;
String command = "\"" + myExecutable + "\"" + " \"%1\"";

并注册您的可执行文件以打开该类型的文件:

String keyName = imgType + @"\shell\Open\command";
using (var key = Registry.ClassesRoot.CreateSubKey(keyName)) {
    key.SetValue("", command);
}

好的,这是运行我的应用程序的方法,但是当程序运行时,如何在picturebox中显示图像? - Pedrum
2
路径作为第一个参数传递给您的程序。您知道如何访问程序参数吗? - Miserable Variable
2
你可以使用 Enviroment.GetCommandLineArgs()。 - trinalbadger587

5

您需要进行一些注册表项的设置。首先,您需要将文件扩展名与类名关联起来(类名可以是任何名称,只需编造即可)。

例如,如果我想将 .foo 扩展名与我的 Blah.exe 程序关联起来,我将创建以下注册表项(注意:在此示例中,我将 .foo 与名为 Foo.Document 的类关联,然后将该类与我的程序关联):

Key: HKLM\SOFTWARE\Classes\.foo
Value: <default> = “Foo.Document”

Key: HKLM\SOFTWARE\Classes\Foo.Document
Value: <default> = “Foo Document”

Key: HKLM\SOFTWARE\Classes\Foo.Document\shell\open\command
Value: <default> = “[blah.exe]” “%1″

3
你的场景让我觉得你可以简单地选择任何JPG文件,右键单击该文件,选择“打开方式”-->选择默认程序,浏览到你的C#程序并选择“始终使用所选程序打开此类文件”的选项。如果你觉得需要通过编程实现这一点,你需要在注册表中设置它。这里有一个SO链接显示了这个过程。

只有一个警告:通过这样做,您可能会失去重要的功能,例如打印...因此请注意现有的查看器设置,以便稍后可以恢复它们(如果需要)。 - corlettk
我想知道的主要和最重要的事情是如何获取我打开的文件的位置或路径,以便我可以将其放入picturebox中,但没有人回答这个问题。 - Pedrum
4
没有人回答你的问题,因为那不是你所问的问题。 - Icarus

2

如果您想将您的应用程序设置为Jpeg文件(例如)的默认应用程序,则可以:

  • 使用Regedit.exe并转到项目HKCR\.jpg\,并创建如下子文件夹:shell\open\command
  • 在那里创建一个新的字符串值,并将默认值编辑为"path_to_exe" "%1"
  • 编辑您的EXE,使其能够读取通过命令行传递的参数,并且如果有一个参数,则在picturebox中打开它(是的,还有许多其他控件可以加载文件,等等...)

好的,但最重要的部分是获取该文件的位置(路径)的部分,以便我可以在Picturebox中获取它。 如何获取已打开文件的路径? - Pedrum
@user982850:在你的软件中,你必须获取传递给你的第一个参数并使用 Path.GetDirectory(arg) - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接