Связывание расширений файлов с программой - PullRequest
7 голосов
/ 13 октября 2009

Я понимаю, как это сделать, и я был на http://www.codeproject.com/KB/vb/VBFileAssociation.aspx раньше. Мой вопрос о том, что делает это, можно ли повернуть вспять? Что если вы не знаете, где будет находиться ваша программа, и сейчас вы просто тестируете ее? Есть ли способ, чтобы он "нашел" вашу программу, или простой способ редактировать, где она открыта? В этом отношении, возможно ли сказать, был ли файл уже связан, это проблема, чтобы попытаться повторно связать? Наконец, как вы можете установить используемый файл .ico?

Спасибо за помощь, я почти ничего не знаю о реестре, и это меня смущает LOL ...

1 Ответ

18 голосов
/ 13 октября 2009

Для краткости я использую поддельный корневой ключ. На практике замените Hive_Key на HKEY_LOCAL_MACHINE для системных настроек по умолчанию или HKEY_CURRENT_USER для пользовательских настроек. Любой из этих ключей может существовать или оба. Если они оба существуют, ключ HKCU имеет приоритет.

Чтобы связать расширение с типом файла, вам необходимо установить значение по умолчанию ключа расширения (Hive_Key\Software\Classes\.ext) для выбранного типа файла, установив значение ключа по умолчанию.

Фактическая запущенная программа, а также другие сведения о типе файла находятся в типе файла. Типы файлов отмечены так называемым ProgID (сокращение от «Programmatic Identifier», который является более легко читаемой версией Class Class Identifier). Ключи ProgID находятся в Hive_Key\Software\Classes, и примерное значение для этой иллюстрации может быть ext_auto_key.

ProgID может иметь значение по умолчанию, которое будет понятным описанием типа файла в Проводнике (например, «Документ Microsoft Word»). Вам нужно убедиться, что вы выбрали описание, которое легко понять пользователям.

ProgID может иметь подраздел DefaultIcon, в котором хранится значок типа файла. Этот путь к значку является значением по умолчанию для этого ключа.

Ключ ProgID может быть подразделом shell, который будет содержать элементы контекстного меню для файлов и программу, которую вызовет этот элемент контекстного меню. Аналогично значению по умолчанию для ProgID, значением по умолчанию ключа глагола является текст, который будет отображаться в контекстном меню. Значение по умолчанию для этого ключа shell имеет имя ключа глагола по умолчанию, которое является глаголом, вызываемым, когда пользователь дважды щелкает файл.

Эти пункты контекстного меню Verbs. В нашем примере глагол, открывающий файл с помощью Блокнота, будет выглядеть так: Hive_Key\Software\Classes\ext_auto_file\shell\open\command со значением по умолчанию notepad.exe %1.

Здесь вы бы указали путь к вашей программе. Если ваша программа находится в системном PATH, как, например, notepad.exe, вам не нужно для указания полного пути. В более вероятном случае вам нужно будет указать путь к вашему exe. В целях тестирования вы можете просто установить его в качестве своего каталога сборки.

Вы спросили, как проверить этот материал, и это можно сделать, сначала проверив значение по умолчанию ключа расширения, чтобы получить ProgID, затем проверив подключ shell ключа ProgID, чтобы получить глагол по умолчанию, затем проверив \shell\verb\command, чтобы получить путь к запущенной программе.

Возможно, будет полезно открыть regedit.exe и просмотреть эти ключи реестра для других типов файлов, чтобы лучше понять, как все это работает.

Кроме того, все вышеперечисленное действительно, если конкретное расширение не контролируется программой, установленной по умолчанию (Программы по умолчанию) на панели управления. Вы можете проверить этот статус, проверив наличие ключа HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Explorer\FileExts\.EXT\UserChoice. Если это так, вам нужно будет отменить контроль программ по умолчанию, прежде чем ваши настройки вступят в силу. Это можно сделать, удалив этот UserChoice подраздел.

...