2012-04-15 116 views
0

如何在C++中创建自定义扩展?我知道在C#中可以很容易地实现它,但是我还没有在C++中看到类似的东西。C++中的自定义文件扩展

嗯,我的意思是类似的东西,我如何写东西,如果我有一个文件.xyz和一个读取.xyz文件的程序,Windows会自动打开它们?

+0

呃,你的意思是命名一些name.xyz,然后将它表示为你自己的格式:)? – ScarletAmaranth 2012-04-15 14:54:47

+1

我可以想到,您可能会想到几件事情,但所有这些答案都是:与C#中的方式相同。那么你能指定更多一点吗? – 2012-04-15 14:57:41

回答

3

看看http://msdn.microsoft.com/en-us/library/windows/desktop/ff513920(v=vs.85).aspx。你显然想知道Windows,所以每个操作系统都有不同的事实并不重要。

这有几个部分。首先,您需要编写实现一些特定COM接口的代码。然后,您将注册表中的条目告诉Windows在哪里可以找到您编写的代码。根据您的需要,这可能只是启动您的应用程序并打开文件,但它也可能包括Windows资源管理器在平铺视图中显示的缩略图(word文档和.txt文件看起来都是相同的,但jpg具有缩略图迷你图像),Windows资源管理器可以在侧面显示的预览,自定义属性等。所有这些都涉及shell和应用程序之间的交互,通过您实现的COM接口,以及shell调用,因为它在注册表中看到您已经编写它们。

+0

好的,谢谢你的信息。 – MKII 2012-04-17 06:12:20

1

简短的回答是,你不能在一般情况下。第一个问题是它取决于操作系统如何处理这个问题。即使在那里,它大多不是决定谁打开哪个文件而是操作系统的程序。而你的操作系统根本不需要知道你是否拥有特定的程序。你所能做的就是建议操作系统在某种安装过程中,应该使用你的程序来打开特定的文件。我不使用Windows,但可能意味着添加一些注册表项。

2

在Windows上,您可以通过assoc命令行实用程序(请参阅http://msdn.microsoft.com/en-us/library/bb490865.aspx)或直接在注册表中执行操作(例如参见http://msdn.microsoft.com/en-us/library/bb776871.aspx)来执行此操作。

在Linux系统上,对于每种文件类型,您必须注册它的MIME类型,然后为该MIME类型注册一个处理程序。有关全面的概述,请参阅http://library.gnome.org/admin/system-admin-guide/stable/mimetypes-0.html.en

我不太了解Mac OS对此有任何帮助,我不得不承认。

编辑:我只记得它是如何工作在Mac OS:在您的应用程序包(*.app/目录),创建一个名为Contents/Info.plist与继property-list specification内容文件,并创建了CFBundleDocumentTypes元素的条目。