Как каждый добавляет вторичный глагол к типу файла в оболочке Windows?

Основная идея с программированием оболочки Windows состоит в том, что можно связать данный тип файла (расширение) с тем, что MS в настоящее время называет проценурозом (например, Компания. Ввести. Ver):

HKCR\.txt =Acme. Текст 1

HKCR\Acme. Текст 1 =This является проценурозом для ассоциаций текстового файла для Высшей точки

И затем Acme Corp. может поместить столько глаголов оболочки, сколько они хотят как подразделы HKCR\Acme. Текст 1\shell, такой как HKCR\Acme. Текст 1\shell\open.

Но если я - XyzCorp, как я добавляю вторичный глагол к текстовым файлам?

Я не хочу узурпировать основную ассоциацию файлов - я рад за нее быть связанным с Высшей точкой. Текст 1, но я хочу добавить "Импорт в Редактора Xyz".

Я мог:
1. добавьте глагол к проценурозу Высшей точки (например, HKCR\Acme. Text.1\shell\my-глагол)
2. создайте новый проценуроз на обоих наших behalfs и скопируйте данные Высшей точки в это и объедините глаголы XyzCorp в это
3. добавьте глаголы непосредственно к расширению файла (по крайней мере один раньше мог сделать так),
4.???

Кто-либо знает "правильный" ответ на это?

Править: Я действительно не взволнован ни с каким решением, которое включает необходимость изменить чужой PROGID. Я действительно предпочел бы добавлять что-то - IContextMenu или независимо от того, что требуется, за пределами связанного PROGID для добавления дополнительных глаголов / опции к данному типу файла.

На такую сумасшедшую систему походит иметь расширение-> проценуроз, где проценуроз принадлежит отдельным зданиям разработки, и может быть удален или изменен таким по желанию. Это кажется мне хрупкий (удалите что-то и пуф, Ваше расширение файла прекращает работать правильно, или установите что-то, и аналогично Ваш вторичный глагол исчезает, потому что расширение теперь отображается на другом собственном PROGID, к которому я не добавил наш глагол к тому, когда мы были установлены (не, в то время, зная что-либо об этом другом пока еще несуществующем проценурозе)), и просто немой. После всего этого времени все эти версии Windows и Microsoft никогда не выясняли способ иметь слои обработчиков для данного типа файла?В самом деле?!?

Я просто нахожу это поразительным! Младшее программирование 101 включает изучение шаблона "команда" или другого многоуровневого / каскадные системы. Windows WinProcs самостоятельно организован в шаблоне шаблона "команда" - так, чтобы от внутреннего контекста окна до внешнего, многим возможным обработчикам дали трещину в данном СООБЩЕНИИ.

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

Я предполагаю, что могу посмотреть на HKCR.*... Я понимаю его возможное для добавления глаголов там, которые относятся ко всем типам файлов. Но затем, я должен найти некоторый способ отфильтровать так, чтобы наш глагол только действительно присутствовал для тех фактических типов файлов, к которым мы должны обратиться...

9
задан Mordachai 29 June 2010 в 21:10
поделиться

1 ответ

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

1. добавить глагол в прогид Acme (например, HKCR \ Acme.Text.1 \ shell \ my-verb)

Это мой голос. Это просто и эффективно. Обновление / переустановка программного обеспечения ACME не повлияет на глаголы, которые вы добавили в тип / прогид файла ACME. Удаление программного обеспечения Acme обычно не приводит к удалению ваших команд, поскольку программы удаления обычно не удаляют ключи реестра, содержащие подключи, которые они не создавали.

2. создать новый прогид от нашего имени и скопировать в него данные Acme и объединить в него глаголы XyzCorp

. Это будет работать во время изменения, но перестанет работать, когда программа Acme будет обновлена ​​/ переустановлена ​​- установщик не узнает для обновления общего типа файла. Точно так же, когда программа удаления Acme запущена, она не удаляет глаголы, поэтому они будут зависать от несуществующего пути.

3. добавлять глаголы непосредственно в расширение файла (по крайней мере, один раньше мог это делать)

Я только что попробовал это на Win XP SP3, и, к сожалению, это не сработало. Глаголы должны быть установлены под ключом типа файла, а не под ключом расширения файла.

4. ???

Вы можете создать обработчик ContextMenu - это расширение оболочки и требует реализации COM-интерфейсов.Обзор различий и преимуществ обработчиков контекстного меню по сравнению с простыми командами, настроенными в реестре, описан в Контекстное меню оболочки .

Резюме Для простоты я бы выбрал №1. Установщик XYZCorp может проверить, существует ли тип файла для расширения файла, и, если да, добавляет команды под существующий тип или создает новый тип файла, если он не существует, и регистрирует команды под этим.

5
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: