Ваш базовый обзор процесса можно найти в этой статье MSDN а>. Ключевые части находятся внизу списка:
ProgID (по сути, ключ реестра типа файла) - это то, что содержит важные свойства типа файла, такие как значок, описание и элементы контекстного меню, включая приложение, используемое при двойном щелчке по файлу. Многие расширения могут иметь один и тот же тип файла. Это сопоставление выполняется на следующем шаге:
- Зарегистрируйте расширение имени файла для типа файла
Здесь вы устанавливаете значение реестра для своего расширения, устанавливая тип файла этого расширения на ProgID, созданный на предыдущем шаге.
Минимальный объем работы, необходимый для открытия файла вашим приложением, - это установка / создание двух ключей реестра. В этом примере .reg
файл я создаю тип файла (blergcorp.blergapp.v1
) и связываю с ним расширение файла (.blerg
).
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]
@="c:\path\to\app.exe \"%1\""
[HKEY_CURRENT_USER\Software\Classes\.blerg]
@="blergcorp.blergapp.v1"
Теперь вы, вероятно, захотите сделать это программно. Чтобы быть абсолютно кошерным, вы можете проверить наличие этих ключей и соответствующим образом изменить поведение вашей программы, особенно, если вы берете на себя управление некоторым распространенным расширением файла. Однако цель может быть достигнута путем установки этих двух ключей с помощью функции SetValue.
Я не уверен в точном синтаксисе C ++, но в C # синтаксис выглядит примерно так:
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");
Конечно, вы можете вручную открывать каждый подключ, вручную создавать ProgID и подключ расширения и затем устанавливать значение ключа, но функция SetValue
хороша тем, что если ключи или значения не существуют, они будут созданы автоматически. Очень кстати.
Теперь несколько слов о том, какой улей использовать. Многие примеры ассоциации файлов в Интернете, в том числе в MSDN, показывают, что эти ключи установлены в HKEY_CLASSES_ROOT
. Я не рекомендую этого делать. Этот куст представляет собой объединенное виртуальное представление HKEY_LOCAL_MACHINE\Software\Classes
(системные значения по умолчанию) и HKEY_CURRENT_USER\Software\Classes
(настройки для каждого пользователя), и записи в любой подключ в улье перенаправляются на тот же ключ в HKEY_LOCAL_MACHINE\Software\Classes
. Теперь нет прямой проблемы с этим, но вы можете столкнуться с этой проблемой: если вы пишете в HKCR (перенаправлен на HKLM), и пользователь указал те же ключи с разными значениями в HKCU, значения HKCU будут иметь приоритет. Таким образом, ваши записи будут успешными, но вы не увидите никаких изменений, потому что HKEY_CURRENT_USER
настройки имеют приоритет над HKEY_LOCAL_MACHINE
настройками.
Следовательно, вы должны принять это во внимание при разработке своего приложения. Теперь, с другой стороны, вы можете писать только на HKEY_CURRENT_USER
, как показывают мои примеры. Однако этот параметр ассоциации файлов будет загружен только для текущего пользователя, и если ваше приложение было установлено для всех пользователей, ваше приложение не запустится, когда этот другой пользователь откроет файл в Windows.
Это должно стать хорошим руководством для того, чем вы хотите заниматься. Для дальнейшего чтения предлагаю
И см. Также мой аналогичный ответ на аналогичный вопрос:
person
Factor Mystic
schedule
15.01.2010