如何将Windows应用程序与特定文件类型相关联,但与其他应用程序共享该关联?

前端之家收集整理的这篇文章主要介绍了如何将Windows应用程序与特定文件类型相关联,但与其他应用程序共享该关联?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我创建一个新的应用程序,并且与特定计算机上的.xml文件扩展名相关联,当有人双击.xml文件时,它将启动我的应用程序并将该文件作为参数传递.但Windows似乎知道其他文件有能力处理该文件类型.怎么设置?

此外,当我将Microsoft Word文件保存为.xml文件时,然后双击该文件,即使.xml文件类型与其他内容(例如Internet Explorer)相关联,它也将启动Microsoft Word.似乎可能有一个与.xml文件类型相关联的存根,当被调用时会查看内容并启动相应的应用程序.

有没有Windows API,还是某种标准的方法呢?

我想要创建一个应用程序来完成Word正在做的工作 – 即以.xml格式保存文件,但是当双击时,启动我的应用程序而不是Internet Explorer.

打开Office .xml文档的机制

对于以XML格式保存并具有.xml扩展名的Word文档,Microsoft实现了一个特殊的处理程序来在相应的应用程序中打开这些文件(此机制不仅用于Word文档,还包括Excel电子表格,InfoPath表单和其他格式).

如果您检查注册表,您将看到扩展名为.xml的文件文件类型设置为xmlfile:

HKEY_CLASSES_ROOT\.xml (Default) = "xmlfile"

文件类型打开时执行的命令在下面指定

HKEY_CLASSES_ROOT\xmlfile\shell\open\command = ""C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSOXMLED.EXE" /verb open "%1""

所以当在资源管理器中双击一个XML文件时,Windows将启动MSOXMLED.EXE.该应用程序现在正在查看XML文件搜索XML处理指令.这个名为mso-application的处理指令可以指定一个ProgId:

<?mso-application progid="Word.Document"?>

如果找到此处理指令,并且ProgId是支持的值之一,MSOXMLED.EXE将在该注册表中搜索为该ProgId指定的打开命令.对于Word.Document,实际上是使用Word.Document的CurVer子项的另一个重定向到Word.Document12(如果安装了Office 2007),那么我们最终得到:

HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\command = ""C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /n /dde"

所以最后,MSOXMLED.EXE将启动相应的Office应用程序或启动下面指定的默认XML应用程序

HKEY_CLASSES_ROOT\XEV.GenericApp\shell\open\command

您可以通过从命令行调用MSOXMLED.EXE来实际尝试:

MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"

如果您想实现相同的行为,您将必须实现一个处理程序,如MSOXMLED.EXE,该文件文件内部查看预定义的处理指令,然后将文档路由到相应的应用程序.

图标处理

上面我们来看看如何处理文档打开和编辑.根据XML文档中的处理指令,另一种机制负责显示一个特定的图标:一个icon handler.

图标处理程序是一种Explorer Shell扩展,它们是可与某些文件类型相关联的进程内COM对象.用于XML文件文件注册表中指定

HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"

这个GUID是指MSOXEV.dll,它将类似于MSOXMLEX.EXE检查ProgId的XML文件,然后提供正确的图标.

由于所有这些都是一个相当复杂的机制,您应该仔细考虑,如果你想这样做.在我看来,注册新的唯一文件扩展名要简单得多.它也受到限制,因为它只适用于允许您在文件标题中包含某些自定义信息(如ProgId)的文件类型.

Microsoft不再使用此方法,而是使用文件扩展名替换新的OpenXML格式(参见Why do Office “.xml” files behave differently from other “.xml” files?).

猜你在找的Windows相关文章