вторник, 12 октября 2010 г.

Что произошло с диалоговым окном Типы файлов?

Это перевод What Happened to the File Types Dialog? Автор: Реймонд Чен.

Еще во времена Windows 95, существовала страница в окне "Свойства папки" под названием "Типы файлов", в которой перечислялись все зарегистрированные типы файлов и связанные с ними команды. Что же с ней случилось?

Ответ: мир изменился, и отображаемая информация была уже не верна.

Собственно, отображаемая информация даже на тот момент не была верной.

Диалоговое окно "Типы файлов" поддерживало только так называемые статические регистрации. То есть команды (verbs), которые выполняются либо из командной строки, либо через DDE. В Windows 3.1, это были практически единственные способы регистрации команд для типов файлов. Поэтому диалоговое окно "Типы файлов" было, по крайней мере, в обращении этот недолгий период, прежде чем оболочка Windows 95 добавила целый набор новых средств для этих целей. Например, команды, добавленные через контекстное меню обработчиков (IContextMenu) не отображались в диалоговом окне "Типы файлов". Вы можете это увидеть, если просмотрите команды для устройств: единственная вещь, которая показывается в найденном диалоговом окне, была команда поиска. Действия "Форматировать" и "Копировать диск" нигде не видны, поскольку они реализованы программно с помощью COM-объектов (в частности, потому что эти команды применяются только к конкретным типам устройств).

Теперь диалоговое окно "Типы файлов" немного в затруднительном положении. Контекстное меню фактически нигде не хранится: команды генерируются кодом во время выполнения внутри оболочки. А способов получить расширенное меню не существует: "Пожалуйста, выдай мне список всех команд, которые ты можешь добавить к записи". Ну, во-первых, расширение контекстного меню может даже не знать эти команды, либо некоторые расширения контекстного меню генерируют действия, основываясь на имени выбранного пользователем файла. Ярлыки не имеют конкретного списка команд или даже образцов для команд. Они только показывают команды, которые принадлежат другому типу файла (например, когда вы нажимаете на ярлык текстового файла, контекстное меню покажет команды для текстового файла. Если обработчик контекстного меню ярлыка должен выработать список всех потенциальных команд, то он должен перечислить все команды этого типа файла!)

Даже если бы существовал способ получения полного списка команд связанных с типом файла, интерфейс для добавления и модификации этого списка был бы совершенно бесполезным. Поскольку расширения оболочки — это COM-объекты, регистрация осуществляется посредством GUID этого типа файла. Да, как вы думали, пользователи будут вводить 32 шестнадцатеричных цифры с систематизированной пунктуацией для создания команды контекстного меню? И это только регистрация команды; они так же должны создать DLL, реализующую интерфейс IContextMenu. Желаю вам удачи в написании онлайн-помощника для этих целей.

Итак, может быть это хорошая идея, чтобы расширение оболочки не показывалось в диалоге "Типы файлов". Но что на счет DDE? DDE — это сокращение от Динамический Обмен Данными (Dynamic Data Exchange), но на самом деле название ничего не проясняет. DDE — это механизм передачи данных, разработанный во времена Windows 3.0, позволяющий двум программам обмениваться данными или передавать команды друг другу. Создание так называемых диалогов DDE требует некоторого количества единиц информации, которую диалоговое окно "Типы файлов" описывает таинственными элементами, такими как "DDE-сообщения" и "DDE-приложения" (которые, не смотря на название, не имеет ничего общего с исполнительным файлом). DDE-приложение не выполняется и не запускается. Ни один из этих терминов ничего не значит для нормального человека; они могут так же быть названы "Magic 1" или "Magic 4".

DDE — это древняя технология, предназначенная для кооперативной многозадачности. Когда вам не нужно было беспокоиться о приложениях, которые зависали в процессе обработки сообщений. Но с переходом на 32-разрядные технологии Windows с вытесняющей многозадачностью, это уже не так. В частности, приложение, перестающее обрабатывать сообщения, мешает завершению передачи сообщений, что вызывает у DDE проблемы, поскольку первым же шагом в диалоге DDE является передача сообщения, которое ищет окно, желающее побеседовать. Одна не отвечающая программа блокирует открытие документов, основанных на DDE. Именно поэтому мы не рекомендуем более использовать DDE для регистрации команд оболочки.

Последней каплей для диалогового окна "Типы файлов" стало введение UAC в Windows Vista. Поскольку регистрация типов файлов является глобальной, его изменение требует привилегий учетной записи администратора, которые по умолчанию отключены. В результате, диалоговое окно "Типы файлов" потребует повышения привилегий. Учитывая тот факт, что диалоговое окно "Типы файлов" уже считалось ущербным и непригодным для использования простыми смертными, а также то, что приложения в общем случае и сами прекрасно регистрировали собственные типы файлов, особого смысла вкладывать силы в это окно и внедрять в него поддержку повышения привилегий уже не было. Функциональность окна "Типы файлов" в большей степени дублируется пунктом меню "Открыть с помощью" и новым, "Сопоставление типов файлов или протоколов конкретным программам", каждый из которых проще в использовании, чем ввод магических слов в четыре загадочных поля.

Но если вы действительно хотите воссоздать окно "Типы файлов" в старом стиле, вы можете запустить RegEdit. Я надеюсь, вы помните, как сказать эти волшебные слова.

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

  1. А если от этого окошка все, что хотелось - это назначить свои иконки на некоторые типы файлов (вопреки тем, которые назначают ассоциированные программы)? Что же, теперь только один путь - лезть в реестр руками и с правами администратора делать исправления, рискуя что-нибудь испортить. СПАСИБО!

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

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

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

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

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

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