Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Механизм открытия документов Office.xml

Для документов Word, сохраненных в XML и имеющих расширений .xml, 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 ищет реестр для команды open, указанной для этого ProgId. Для Word.Document на самом деле существует другое перенаправление на Word.Document12 (если Office 2007 установлен) с помощью подраздела CurVer Word.Document, поэтому мы получаем:

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

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

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

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

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

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

Ответ 2

Ну, все ассоциации файлов хранятся в реестре. Там может быть статья "" Понимание сетевых файлов Windows".

Кроме того, существует множество способов программно создавать ассоциации файлов. Хотя чаще всего это делается в установщике. Например, моя любимая система установки NSIS имеет макрос, чтобы справиться с этим: http://nsis.sourceforge.net/FileAssoc

Но тогда возникает проблема установки программы по умолчанию для открытия определенного типа файла. Я не знаю, какой язык или установить систему вы планируете использовать для этого, но кажется, что вопрос ответил здесь для NSIS. Разумеется, у Microsoft также есть документация по их способу сделать это с установщиком Windows. Но, как вы, наверное, догадались, я больше человек NSIS.;)

Ответ 3

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

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