Оболочка использует подключи реестра программных идентификаторов (programatic identifier или ProgID), чтобы ассоциировать тип файла с приложением, и чтобы контролировать поведение ассоциации. Записи ProgID, используемые для файловых ассоциаций, хранятся в ключе реестра HKEY_CLASSES_ROOT.
Эта тема организована так:
- Регистрация типа файлов для нового приложения
- Элементы программного идентификатора, используемые файловыми ассоциациями
- Использование версионных программных идентификаторов
- Связанные темы
Регистрация типа файлов для нового приложения
Если вы планируете ассоциировать один или более типов файлов с новым приложением, то вы обязаны создать новый ProgID для каждого типа файлов, который вы хотите ассоциировать с приложением.Чтобы создать ProgID для каждого уникального файлового типа, которое обрабатывает ваше приложение:
- Заметьте, что некоторые файловые типы имеют много расширений, указывающий на один ProgID. Например:
- HKEY_CLASSES_ROOT\App.jpeg (ваш ProgID)
- HKEY_CLASSES_ROOT\.jpg = App.jpeg (проецирование расширения на ProgID)
- HKEY_CLASSES_ROOT\.jpeg = App.jpeg (проецирование второго расширения на тот же ProgID)
- Вам нужно удалять все значения ProgID из реестра, когда вы удаляете своё приложение.
- Оставляйте файловые ассоциации неизменными во время удаления приложения. Это будет работать нормально, потому что система опознаёт случай, когда значение ProgID отсутствует и просто игнорирует его. Если вы будете так делать, то избежите сложного кода проверки, который удаляет проецирование расширения на ProgID только, если никакое другое приложение не изменило ассоциацию типов после установки вашего.
- Указывайте уникальное значение для описания файлового типа для каждого ProgID:
- Либо оставьте значение по-умолчанию для ProgID пустым, что приведёт к использованию системой описания ".ext файл".
- Либо предоставьте локализованное значение через FriendlyTypeName и, для совместимости со старыми приложениями, которые читают напрямую из реестра, значение по-умолчанию для ProgID (используйте то же значение, что и в FriendlyTypeName на английском).
Элементы программного идентификатора, используемые файловыми ассоциациями
Правильный формат ProgID является таким [Поставщик или приложение].[Компонент].[Версия] - три части, соединённые точками, без пробелов, например: Word.Document.6. Часть Версия является необязательной, но рекомендуемой. Для дальнейшей информации, см. Использование версионных программных идентификаторов ниже.Подключ ProgID должен включать следующие элементы. Заметьте, что некоторые строковые данные в этом ключе требуют особого форматирования.
Элемент | Описание |
---|---|
(Default) |
Установите значение по-умолчанию для ProgID в название формата файлов для этого ProgID, пригодное для показа пользователю. Это поле устарело в Windows 2000 и выше. Вместо него следует использовать значение FriendlyName (см. ниже). Тем не менее, вы должны установить это поле для совместимости со старыми программами. Для согласованности - здесь должны быть те же данные, что и в поле FriendlyName (но только для одного языка). |
AppUserModelID (Windows 7 и выше) |
Установите в это необязательное значение идентификатор модели пользователя приложения (Application User Model ID, AppUserModelID), если приложение использует явный (explicit) AppUserModelID и использует либо автоматически сгенерированные системой Jump-списки Недавние или Часто используемые или предоставляет свой Jump-список. Если приложение использует явный AppUserModelID, но не устанавливает это значение, то элементы не будут появляться в Jump-списках этого приложения. Это строка типа REG_SZ. Для дальнейшей информации - см. Application User Model IDs (AppUserModelIDs). |
EditFlags |
Установите это необязательное значение, используя флаги из перечисления FILETYPEATTRIBUTEFLAGS. Запись EditFlags контролирует некоторые аспекты в обработке типа файла, ассоциированного с этим ProgID, Оболочкой. Вы также можете использовать запись EditFlags, чтобы ограничить возможность изменения некоторых аспектов этих файловых типов пользователем. Значения FILETYPEATTRIBUTEFLAGS, используемые для EditFlags, являются двоичными значениями, предназначенными для комбинирования с использованием логической операции ИЛИ. Это значение может иметь тип REG_DWORD или REG_BINARY. |
FriendlyTypeName |
Установите в эту запись название типа файлов (friendly name) этого ProgID, пригодного к показу пользователю. Для согласованности - здесь должны быть те же данные, что и в значении по-умолчанию (см. выше). Эта запись может быть типа REG_SZ или REG_EXPAND_SZ, но должна быть оформлена как косвенная строка (indirect string) - т.е. полное имя файла и значение ресурса, с ведомым @, например: @%SystemRoot%\shell32.dll,-154. |
InfoTip |
Установите в эту запись краткое описание, которое Оболочка будет показывать для этого ProgID. Запись InfoTip показывается, когда пользователь задерживает мышь над файлом этого типа. Это значение может иметь тип REG_SZ или REG_EXPAND_SZ, но, как и FriendlyTypeName, оно должно быть косвенной строкой. |
CurVer |
Установите запись по-умолчанию этого подключа на самую последнюю версию ProgID. Примечание: если только вы не разрабатываете side-by-side приложение (т.е. приложение, которое допускает одновременную установку нескольких своих различных версий на одну машину), то вам не следует использовать запись CurVer. |
DefaultIcon. |
Установите значение по-умолчанию этого подключа в иконку по-умолчанию, которую вы хотите показывать для файловых типов, ассоциированных с этим ProgID. Это значение может быть либо REG_SZ, либо REG_EXPAND_SZ, но оно должно иметь формат полного имени файла со значением ресурса через запятую, например: %SystemRoot%\shell32.dll,-154. |
Следующий пример ключей в реестре иллюстрирует ProgID файловой ассоциации:
HKEY_CLASSES_ROOT Vendor.App.1 (Default) = My Friendly Name AppUserModelID [REG_SZ] = Vendor.Application EditFlags [REG_DWORD] = 0x00000001 FriendlyTypeName [REG_EXPAND_SZ] = @%SystemRoot%\shell32.dll,-154 InfoTip [REG_EXPAND_SZ] = @%SystemRoot%\shell32.dll,-54 CurVer (Default) = Vendor.App.1 DefaultIcon (Default) = %SystemRoot%\shell32.dll,-1
Использование версионных программных идентификаторов
Версионный ProgID - это такой ProgID, у которого в его имени указана версия. Обычно это делается добавлением точки и номера версии к имени ProgID. Например:- Word.Document.6
- Word.Document.8
Огромное спасибо за статью.
ОтветитьУдалить