Как связать приложение Windows с определенным типом файла, но поделиться этой ассоциацией с другими приложениями?

Если я создам новое приложение и свяжусь, скажем, с .расширение xml-файла на определенном компьютере, когда кто-то дважды щелкает .xml-файл, он запустит мое приложение и передаст файл в качестве параметра. Но Windows, похоже, знает, какие другие файлы имеют возможность работать с этим типом файлов. Как это устроено?

кроме того, когда я сохраняю файл Microsoft Word как.xml-файл, затем позже дважды щелкните по файлу ,он запустит Microsoft Word, даже если.тип файла xml связано с чем-то еще, например с Internet Explorer. Похоже, с ним может быть связан обрубок .тип xml-файла, который при вызове просматривает содержимое и запускает соответствующее приложение.

есть ли Windows API или какой-то стандартный способ сделать это?

Что я хотел создать приложение, чтобы сделать именно то, что слово делает, т. е. сохранить файл .формат xml, но при двойном щелчке, запускает мое приложение вместо Internet Explorer.

3 ответов


механизм открытия офиса .xml-документы

для документов Word, сохраненных в XML и имеющих.расширения xml Microsoft реализовала специальный обработчик для открытия этих файлов в соответствующем приложении (этот механизм используется не только для документов Word, но и электронных таблиц Excel, форм InfoPath и некоторых других форматов).

если вы проверите реестр, вы увидите, что тип файла для файлов с a .расширение 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.ИСПОЛНЯЕМЫЙ. Это приложение теперь ищет внутри XML-файла и ищет инструкции по обработке XML. Эта инструкция обработки называется mso-application можно указать ProgId:

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

если эта инструкция по обработке найдена и ProgId является одним из поддерживаемых значений MSOXMLED.EXE ищет в реестре команду open, указанную для этого ProgId. Для слово.Документ на самом деле есть еще один редирект на слово.Document12 (если установлен Office 2007) с помощью подраздела CurVer Word.Документ, поэтому мы заканчиваем:

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-документа:обработчик значок.

обработчики значков - это тип расширений оболочки проводника, которые являются обрабатываемыми COM-объектами, которые могут быть связаны с определенными типами файлов. Тот, который используется для XML-файлов, указан в реестре в разделе

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

этот идентификатор GUID ссылается на MSOXEV.dll, которая будет-аналогично MSOXMLEX.EXE проверьте XML-файл для ProgId, а затем укажите правильный значок.

поскольку все это довольно сложный механизм, вы должны тщательно рассмотреть, если хотите пойти этим путем. На мой взгляд, гораздо проще зарегистрировать новое уникальное расширение файла. Он также ограничен, поскольку он будет работать только с типами файлов, которые позволяют включать некоторую пользовательскую информацию (как ProgId) в заголовок файла.

Microsoft больше не использует этот метод и использует расширения файлов вместо их новых форматов OpenXML (см. почему офис ".xml "файлы ведут себя иначе, чем другие".xml " файлы?).


Ну, все ассоциации файлов хранятся в реестре. Вот статья:" понимание ассоциаций файлов MS Windows


в Проводнике Windows нажмите Инструменты- > Параметры папки - >типы файлов. Нажав на "Создать" или "дополнительно" вы можете создать/изменить собственные ассоциации приложений с различными типами файлов, которые появятся при нажатии правой кнопки мыши на файл.

EDIT: я не знаю, есть ли заглушка, которая перенаправляет определенные файлы. Вы можете проверить мой компьютер\HKEY_CLASSES_ROOT в реестре и посмотреть, что он там помещает.