понедельник, 27 сентября 2010 г.

1.7. Программные идентификаторы

Это перевод Programmatic Identifiers. Цикл: реализация индивидуального формата файлов.

Оболочка использует подключи реестра программных идентификаторов (programatic identifier или ProgID), чтобы ассоциировать тип файла с приложением, и чтобы контролировать поведение ассоциации. Записи ProgID, используемые для файловых ассоциаций, хранятся в ключе реестра HKEY_CLASSES_ROOT.

Эта тема организована так:

Регистрация типа файлов для нового приложения

Если вы планируете ассоциировать один или более типов файлов с новым приложением, то вы обязаны создать новый ProgID для каждого типа файлов, который вы хотите ассоциировать с приложением.

Чтобы создать ProgID для каждого уникального файлового типа, которое обрабатывает ваше приложение:
  1. Заметьте, что некоторые файловые типы имеют много расширений, указывающий на один ProgID. Например:
    • HKEY_CLASSES_ROOT\App.jpeg (ваш ProgID)
    • HKEY_CLASSES_ROOT\.jpg = App.jpeg (проецирование расширения на ProgID)
    • HKEY_CLASSES_ROOT\.jpeg = App.jpeg (проецирование второго расширения на тот же ProgID)
  2. Вам нужно удалять все значения ProgID из реестра, когда вы удаляете своё приложение.
  3. Оставляйте файловые ассоциации неизменными во время удаления приложения. Это будет работать нормально, потому что система опознаёт случай, когда значение ProgID отсутствует и просто игнорирует его. Если вы будете так делать, то избежите сложного кода проверки, который удаляет проецирование расширения на ProgID только, если никакое другое приложение не изменило ассоциацию типов после установки вашего.
  4. Указывайте уникальное значение для описания файлового типа для каждого ProgID:
    • Либо оставьте значение по-умолчанию для ProgID пустым, что приведёт к использованию системой описания ".ext файл".
    • Либо предоставьте локализованное значение через FriendlyTypeName и, для совместимости со старыми приложениями, которые читают напрямую из реестра, значение по-умолчанию для ProgID (используйте то же значение, что и в FriendlyTypeName на английском).
Если вы планируете ассоциировать файл с существующим приложением, то найдите ProgID этого приложения в реестре. Для дальнейшей информации см. Типы файлов.

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

Правильный формат 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
Это версионные ProgID, с версиями 6 и 8 соответственно. Если у вас есть side-by-side приложение (т.е. такое, которое поддерживает установку нескольких своих версий на одну машину одновременно), то используйте CurVer и версионные ProgID. В противном случае вам следует избегать CurVer и версионных ProgID, потому что они приводят к неэффективности.

Связанные темы

1 комментарий:

  1. Анонимный4 июня 2013 г., 17:11

    Огромное спасибо за статью.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.