Основная идея с программированием оболочки для Windows является то, что вы можете связать данный тип файла (расширение) с тем, что MS в настоящее время вызова ProgID (например Company.Type.Ver):Как добавить вторичный глагол к типу файла в оболочке Windows?
HKCR \ .txt @ = Acme .Text.1
HKCR \ Acme.Text.1 @ = Это ProgID для текстовых файлов ассоциаций Acme
И тогда Acme Corp может поставить так много глаголов оболочки, как они хотят, как подразделы HKCR \ Acme.Text.1 \ shell, такой как HKCR \ Acme.Text.1 \ shell \ open.
Но если я XyzCorp, как добавить вторичный глагол в текстовые файлы?
Я не хочу узурпировать основную ассоциацию файлов. Я рад, что он связан с Acme.Text.1, но я хочу добавить «Импорт в редактор Xyz».
Я мог:
1. добавить глагол ProgID Acme (например HKCR \ Acme.Text.1 \ оболочки \ мой глагол)
2. создать новый ProgID на обоих наших behalfs и скопировать данные ACME на что и слить глаголы XyzCorp в
3. добавить глаголы непосредственно к расширению файла (по крайней мере, один из них был использован)
4. ???
Кто-нибудь знает «правильный» ответ на этот вопрос?
EDIT: Я действительно не в восторге от любого решения, которое связано с необходимостью модифицировать чужой ПРОГИД. Я бы предпочел добавить что-то - IContextMenu или что-то еще, за пределами связанного с ним PROGID, чтобы добавить дополнительные глаголы/опции в данный тип файла.
Кажется, что такая сумасшедшая система имеет ext-> progid, где progid принадлежит отдельным домам разработки и может быть удалена или изменена таким образом по желанию. Это поражает меня как хрупкое (удалите что-то и poof, ваше расширение файла перестает работать исправно или что-то установить, а также ваш вторичный глагол исчезает, потому что ext теперь сопоставляется с другим проприетарным PROGID, к которому я не добавлял наш глагол, когда мы были (не в то время, зная что-либо об этой другой, пока еще несуществующей прогиде)), и просто немой. После всего этого времени все эти версии Windows и Microsoft никогда не выяснили способ иметь слои обработчиков для заданного типа файла? В самом деле?!?
Я просто нахожу, что flabbergasting! Юниорское программирование 101 включает в себя изучение командного шаблона или других многоуровневых/каскадных систем. Windows WinProcs сами организованы в шаблон шаблона команды - так что из внутреннего контекста окна во внешнее множество возможных обработчиков получают трещину в данной MSG.
Наверняка есть способ добавить глагол, который применяется к нескольким расширениям без переопределения первичной ассоциации продлений, которая сама по себе полностью не зависит от первичного отображения расширения -> progid (так что пользователь может установить несколько программ по время и все еще имеют доступ к вторичному глаголу для этого типа файла).
Я полагаю, что я могу посмотреть на HKCR. * ... Я понимаю его возможное добавление глаголов, которые применяются ко всем типам файлов. Но тогда мне нужно найти способ фильтрации, чтобы наш глагол действительно присутствовал только для тех фактических типов файлов, которые мы должны применять для ...
Это выглядит чрезвычайно интригующим. Если это работает для XP +, тогда я золотой! Waaaaay лучше любого из предыдущих решений! Бонус для «воспринимаемого типа»! – Mordachai
@Mordachai: он работает для XP +; не уверен, работает ли он до XP или если XP был, когда он был добавлен. – Boann
Этот ответ был очень полезен, спасибо! :) – CptRobby