Блог gunsmoker-а (переклади) 1

Тип файлу: загальнодоступний проти закритого

Загальнодоступний (public) тип файлу також відомий як популярний або спірне - бо кілька конкуруючих додатків можуть хотіти бути асоціювання з файлом такого типу. Характеристики сценарію з використанням загальнодоступного типу файлів включають в себе:
  • Вони зазвичай визначаються стандартами і / або просуваються організаціями, їх визначили, як формат обміну даними.
  • Ними часто обмінюються між машинами і користувачами.
  • Вони повинні підтримуватися на декількох платформах.
  • Їх можуть обробляти додатки від декількох розробників.
Деякі приклади файлів, які розглядаються загальнодоступними: файли зображень .png. gif. jpg і .bmp, аудіо-файли .wav. mp3 і .au.

На відміну від загальнодоступних типів файлів, закриті (private) або пропріорітарние типи файлів зазвичай мають формат, який реалізується і розуміється тільки одним розробником або одним додатком. В результаті закриті типи файлів зазвичай уразливі для конфліктів між додатками. Деякі типи файлів можуть народжуватися як закриті і ставати загальнодоступними пізніше.

Примітка. Windows не робить різниці між загальнодоступними та закритими файловими типами. Це поділ має сенс тільки при прийнятті рішень, що стосуються вашого вибору при реєстрації типів файлів.

Вибір розширення для типу файлів

Ваш тип файлів ідентифікується по своєму розширенню.

Реєстрація типу файлу

Щоб асоціювати тип файлу з існуючим додатком, знайдіть ProgID цього додатка в реєстрі. Щоб асоціювати тип файлу з новим додатком, спочатку створіть ProgID для вашого застосування. Для подальшої інформації про створення нового ProgID - см. Програмні ідентифікатори.

З'єднати реєстру для розширення імені файлу повинен мати таку форму: розширення = ProgID. Підключи розширень імен файлів зберігаються в HKEY_CLASSES_ROOT.

Важливим моментом є вказівка ​​провідною точки (.) При створенні підключа типу файлу в реєстрі. Наприклад, якщо ви хочете, щоб типи файлу з коротким розширенням .myp і довгим розширенням .myp-file відкривалися в додатку MyProgram, то ви використовуєте такий синтаксис: Як показано в прикладі вище, якщо ви також реєструєте короткий розширення файлу (.myp), вам також слід створити з'єднання для довгого розширення (.myp-file). Для подальшої інформації - див. File Type Handlers.

Установка необов'язкових подключей і атрибутів розширення файлу

Записи розширень типів файлів в реєстрі мають кілька опціональних подключей і атрибутів.

Записи розширень типів файлів, які використовуються файловими розширеннями, описані в наступній таблиці. Всі значення мають тип REG_SZ.

Запис в реєстрі

Цей з'єднання містить одне або кілька додатків, які з'являються в діалоговому вікні Відкрити за допомогою для файлового типу.

Цей з'єднання містить список альтернативних ProgID для цього типу файлу. Програми з цими ProgID також з'являються в діалозі Відкрити за допомогою. Коли додаток бере контроль над типом файлу, змінюючи значення за замовчуванням, воно також має занести себе в цей список.

Встановіть значення PerceivedType в ім'я perceived-типу, якому належить файл. Це значення не використовується Windows до Windows Vista. Для подальшої інформації - див. Perceived Types and Application Registration.

Звичайна форма підключа з файловим розширенням виглядає так (всі записи мають тип REG_SZ): Важливими моментами для розгляду при цьому є:
  • Піддерево HKEY_CLASSES_ROOT є відображенням, сформованим злиттям HKEY_CURRENT_USER \ Software \ Classes і HKEY_LOCAL_MACHINE \ Software \ Classes
  • Зазвичай HKEY_CLASSES_ROOT призначений для читання, а не для запису. Для подальшої інформації - див. Статтю HKEY_CLASSES_ROOT.
  • Щоб зареєструвати файловий тип глобально на заданій машині, створіть запис для типу файлу в HKEY_LOCAL_MACHINE \ Software \ Classes.
  • Щоб зареєструвати файловий тип тільки для поточного користувача - створіть запис для типу файлу в HKEY_CURRENT_USER \ Software \ Classes.
  • Додаток може вказувати своє власну реалізацію дій (таких як open або play), як показано в наступному прикладі: Підключи ключа дії (verb) включають в себе командний рядок і метод drop target: command і DropTarget.
  • Коли ви створюєте або змінюєте файлове розширення, вам потрібно повідомити систему про який нещодавно трапився зміні. Ви можете зробити це викликом функції SHChangeNotify із зазначенням події SHCNE_ASSOCCHANGED. Якщо ви цього не зробите, то ваше зміна може залишитися непоміченим до перезавантаження системи.
  • Щоб витягти з реєстру інформацію про файлових асоціаціях, використовуйте інтерфейс IQueryAssociations. Див. File Association Sample Scenario для сценарію, який ілюструє цю процедуру.
Примітка. обидва підключа реєстру App Paths і Applications використовуються для реєстрації і контролю поведінки системи для додатків. Для додаткової інформації про цю функціональності - см. Реєстрація додатків.

Визначення атрибутів типу файлу

Присвоєння атрибутів файлового типу асоційованого ProgID дозволяє вам контролювати деякі аспекти поведінки файлового типу. До Windows Vista ці атрибути дозволяли вам обмежувати область дії вкладки властивостей Властивості папки для зміни різних аспектів типів файлів, таких як його іконка або дії.

Файлові атрибути є двійковими прапорами, що вказуються як значення REG_DWORD або REG_BINARY в подключе асоційованого з типом файлу ProgID. Щоб привласнити типу файлу атрибути, додайте запис EditFlags в ProgID, асоційований з типом файлу і встановіть в ній відповідний набір прапорів. Прапори можуть комбінуватися за допомогою логічної побітової операції АБО (OR).
Див. FILETYPEATTRIBUTEFLAGS для списку можливих атрибутів типів файлів і їх HEX-значень, а також деталей з програмної установці і отриманні цих значень.

Наступний приклад показує встановлені атрибути FTA_NoRemove ($ 00000010) та FTA_NoNewVerb ($ 00000020) для типу файлу .myp:

Активувати програму в діалог "Відкрити за допомогою"

Щоб переконатися, що додаток додається в меню Відкрити за допомогою для типу файлу, додайте посилання на додаток або в OpenWithProgids. або в OpenWithList для типу файлу - як показано в цьому прикладі: З'єднати OpenWithProgids є кращим перед OpenWithList для ідентифікації додатка. Для подальшої інформації по цим ключам - см. Установка необов'язкових подключей і атрибутів розширення файлу вище.

Виняток додатки з діалогу "Відкрити за допомогою" для файлів без асоціацій

Коли користувач намагається відкрити файл, який не є членом будь-якого зареєстрованого типу (тобто він є файлом невідомого типу), або коли користувач вибирає команду Відкрити за допомогою або Відкрити за допомогою -> Вибрати програму за замовчуванням з контекстного меню файлу, то оболонка показує підміню або діалогове вікно, які дозволяють користувачеві вказати програму, якої потрібно відкрити цей файл.

За замовчуванням, будь-який додаток, зареєстроване в подключе HKEY_CLASSES_ROOT \ Applications представлено в цьому діалозі Відкрити за допомогою. Ці додатки представлені в Відкрити за допомогою незалежно від того, чи зареєстровані вони обробляти тип файлу.

Щоб запобігти появі вашої програми в діалоговому вікні Відкрити за допомогою. коли додаток не повинно або не може бути використано для відкриття певних типів файлів, використовуйте одну з двох технік:
  1. Додайте запис NoOpenWith в з'єднанні додатки. Коли додаток використовує файловий тип, Windows зберігає цю інформацію, щоб побудувати список Рекомендовані програми. Цей список представлений в підміню Відкрити за допомогою. як показано нижче:

Блог gunsmoker-а (переклади) 1

Знімок екрана з контекстним меню з розкритим підміню "Відкрити за допомогою"

Блог gunsmoker-а (переклади) 1

Знімок екрану діалогу "Відкрити за допомогою" зі списком "Рекомендовані додатки"


Додатки можуть відключити це відстеження, зазначенням значення NoOpenWith під ключем додатки.

Примітка. якщо додаток зареєструвало себе в списку OpenWithList або OpenWithProgIDs для типу файлу, то воно з'явиться в списку Рекомендовані програми. навіть якщо воно вкаже запис NoOpenWith. Також, не забувайте, що навіть якщо програма не показується в списку програм, то користувач все одно може вибрати будь-яку програму вручну.

Запис NoOpenWith - це пусте значення типу REG_SZ. як показано в наступному прикладі: Установка NoOpenWith також має такі ефекти:
  • Чи не дає закріпити файл в Jump-список додаток через drag-and-drop, якщо тільки програма не зареєстровано для обробки цього типу файлу.
  • Чи не дає загального файлового діалогу і будь-якого виклику SHAddToRecentDocs додавати будь-який файл в Jump-список додатки, якщо тільки програма не зареєстровано для обробки цього типу файлу.
  • Другим способом запобігти появі додатки в діалоговому вікні Відкрити за допомогою є використання підключа SupportedTypes для явної вказівки списку розширень, які ваше додаток здатне відкрити. Це не дає додатком з'являтися в діалоговому вікні Відкрити за допомогою для типів файлів, які воно не може відкрити. Це також призводить до показу програми у списку Рекомендовані програми. описаного вище, для підтримуваних їм файлів.

    Цей спосіб особливо корисний, якщо додаток може зберігати файл певного типу, але не може його відкривати. Додаток має також встановити прапор FOS_DONTADDTORECENT через виклик IFileDialog.SetOptions. коли воно викликає діалог збереження файлів. Це не дає елементу з'являтися в секціях Недавні або Часті в Jump-списку додатки. Це також блокує відстеження додатка для OpenWithList.

    Кожне підтримуване розширення додається як запис підключа SupportedTypes. як показано в наступному прикладі. Всі записи мають тип REG_SZ або REG_NULL, без асоційованих значень. Якщо ключ SupportedTypes заданий, то тільки файли з цими розширеннями можуть бути закріплені в Jump-списку додатки або бути відстежувати секціями Недавні або Часто використовувані.

    Запис NoOpenWith має пріоритет над SupportedTypes і приховує додатки з діалогового вікна Відкрити за допомогою.


  • Видалення інформації з реєстру під час видалення програми

    Коли ви видаляєте додаток, ProgID і більшість іншої інформації в реєстру, асоційованої з додатком, повинні бути видалені під час видалення програми. Однак, додатки, які взяли володіння над файловим типом (зазначенням значення за умовчанням в ключі типу файлу HKEY_CLASSES_ROOT \ .extension на ProgID додатки), не повинні намагатися видалити це значення під час видалення. Залишення даних на своєму місці для використання стандартних значень дозволяє уникнути складнощів визначення, чи не перезаписати це значення в іншій програмі, після установки цього додатка. Windows враховує значення за замовчуванням тільки, якщо зазначений в ньому ProgID зареєстрований. Якщо ж ProgID не зареєстрований, то значення ігнорується, як ніби його й не було.

    Зауважте, що інша інформація про володіння типу файлу зберігається в поддереве HKEY_CURRENT_USER і також використовується тільки, якщо додаток зареєстровано. Тому, ці дані не потрібно видаляти, коли ви видаляєте додаток.

    Наступний приклад показує стан реєстру до видалення програми: А приклад нижче - стан цього ж реєстру після видалення програми:

    Файлові типи, які підтримують відкриті мета-дані

    У Windows 7 і вище наступні файлові типи підтримують відкриті мета-дані.