如何在C ++中创建自定义扩展?我知道在C#中可以很容易地实现它,但我还没有在C ++中看到类似的东西。
嗯,我的意思是,我怎么能写东西,如果我有一个文件.xyz和一个读取.xyz文件的程序,Windows会自动打开它们?
答案 0 :(得分:3)
看看http://msdn.microsoft.com/en-us/library/windows/desktop/ff513920(v=vs.85).aspx。你显然想知道Windows,所以每个操作系统的不同之处并不重要。
这有几个部分。首先,您需要编写实现某些特定COM接口的代码。然后,您将条目放在注册表中,告诉Windows在哪里可以找到您编写的代码。根据您的需要,可能只是启动您的应用程序并打开文件,但它可能还包括Windows资源管理器在磁贴视图中显示的缩略图(word文档和.txt文件看起来都一样,但jpgs有一个缩略图,迷你图像),Windows资源管理器可以在侧面显示的预览,自定义属性等。所有这些都涉及shell和您的应用程序之间的交互,通过您实现的COM接口,以及shell调用,因为它在注册表中看到您已经编写它们。
答案 1 :(得分: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
的文件,其内容跟在{{{ 3}}并创建property-list specification元素的条目。
答案 2 :(得分:1)
简短的回答是你不能做到一般。第一个问题是它取决于操作系统如何处理这个问题。即使在那里,主要不是程序决定谁打开哪个文件而是操作系统。而且你的操作系统根本不知道你是否有特定的程序。您所能做的就是在某种安装过程中建议操作系统使用您的程序打开特定文件。我不使用Windows,但可能意味着添加一些注册表项。