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