zum*_*ard 19 xml windows file-extension file-association
如果我创建一个新的应用程序,并与特定计算机上的.xml文件扩展名相关联,当有人双击.xml文件时,它将启动我的应用程序并将该文件作为参数传递.但Windows似乎知道其他文件能够使用该文件类型.这是怎么设置的?
此外,当我将Microsoft Word文件另存为.xml文件时,稍后双击该文件,它将启动Microsoft Word,即使.xml文件类型与其他内容相关联,例如Internet Explorer.似乎可能存在与.xml文件类型相关联的存根,在调用时会查看内容并启动相应的应用程序.
有没有Windows API,或某种标准方式来做到这一点?
我想创建一个应用程序来完成Word正在做的事情 - 即以.xml格式保存文件,但双击时,启动我的应用程序而不是Internet Explorer.
Dir*_*mar 21
对于以XML格式保存并具有.xml扩展名的Word文档,Microsoft在相应的应用程序中实现了一个特殊的处理程序来打开这些文件(此机制不仅用于Word文档,还用于Excel电子表格,InfoPath表单和其他一些格式).
如果您检查注册表,您将看到扩展名为.xml的文件的文件类型设置为xmlfile:
HKEY_CLASSES_ROOT\.xml (Default) = "xmlfile"
Run Code Online (Sandbox Code Playgroud)
打开此文件类型时执行的命令在下面指定
HKEY_CLASSES_ROOT\xmlfile\shell\open\command = ""C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSOXMLED.EXE" /verb open "%1""
Run Code Online (Sandbox Code Playgroud)
因此,当在资源管理器中双击XML文件时,Windows将启动MSOXMLED.EXE.此应用程序现在查看XML文件并搜索XML处理指令.这个名为mso-application的处理指令可以指定一个ProgId:
<?mso-application progid="Word.Document"?>
Run Code Online (Sandbox Code Playgroud)
如果找到此处理指令并且ProgId是受支持的值之一,则MSOXMLED.EXE将在Registry中搜索为该ProgId指定的open命令.对于Word.Document,实际上有另一个重定向到Word.Document12(如果安装了Office 2007)使用Word.Document的CurVer子项,所以我们最终得到:
HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\command = ""C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /n /dde"
Run Code Online (Sandbox Code Playgroud)
因此,最后MSOXMLED.EXE将启动相应的Office应用程序或启动指定的默认XML应用程序
HKEY_CLASSES_ROOT\XEV.GenericApp\shell\open\command
Run Code Online (Sandbox Code Playgroud)
您可以通过从命令行调用MSOXMLED.EXE来实际尝试此操作:
MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"
Run Code Online (Sandbox Code Playgroud)
如果要实现相同的行为,则必须实现像MSOXMLED.EXE这样的处理程序,该处理程序在文件中查找预定义的处理指令,然后将文档路由到相应的应用程序.
上面我们看了文档打开和编辑的处理方式.另一种机制负责根据XML文档中的处理指令显示特定图标:图标处理程序.
图标处理程序是一种Explorer Shell扩展,它是进程内COM对象,可以与某些文件类型相关联.用于XML文件的文件在注册表中指定
HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"
Run Code Online (Sandbox Code Playgroud)
此GUID引用MSOXEV.dll,它将与MSOXMLEX.EXE类似,检查ProgId的XML文件,然后提供正确的图标.
由于所有这些都是一个相当复杂的机制,你应该仔细考虑,如果你想这样做.在我看来,注册一个新的唯一文件扩展名要简单得多.它也受到限制,因为它只适用于允许您在文件头中包含一些自定义信息(如ProgId)的文件类型.
Microsoft不再使用此方法,而是使用文件扩展名来代替其新的OpenXML格式(请参阅为什么Office".xml"文件的行为与其他".xml"文件不同?).
| 归档时间: |
|
| 查看次数: |
13281 次 |
| 最近记录: |