Как установить приложение в качестве программы по умолчанию для открытия файла определенного типа программным способом? - PullRequest
4 голосов
/ 25 ноября 2008

Из моей программы в MFC сгенерирован исполняемый файл, и я хочу использовать его в качестве программы по умолчанию для открытия файлов .jpg. То есть, каждый раз, когда я дважды щелкаю файл .jpg, моя программа запускается.

Я попытался добавить некоторые записи реестра, связывающие файлы .jpg с моей программой, такие как HKEY_CLASSES_ROOT\.jpg\shell\open\command (установите его значение на "myProgram.exe" "%1") и HKEY_CLASSES_ROOT\myProgram.

Метод работает просто отлично, за исключением случаев, когда некоторые другие приложения регистрируются, чтобы открыть файлы .jpg. Например, я установил acdSee на свой компьютер, поэтому каждый раз, когда я дважды щелкаю файл .jpg, он всегда запускает acdSee вместо моей собственной программы. Но когда я регистрирую совершенно новый тип файла в моей программе, он может быть открыт в программе. Я не знаю, как программно установить мою программу в качестве программы открытия по умолчанию уже зарегистрированного файла. Может кто-нибудь помочь мне решить эту проблему? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 25 ноября 2008

Более типичный / стандартный способ сделать это - установить значение по умолчанию для клавиши «.jpg» для имени, которое более четко идентифицирует тип файла, а затем настроить различные связанные с ним действия. Так что для jpgs вы можете сделать это:

HKCR\.jpg
   @default = MyApp.JpegImage
HKCR\MyApp.JpegImage\shell\open\command
   @default = "myApp.exe "%1""

Если какая-то другая программа решит зарегистрировать тип, она заменит значение по умолчанию для HKCR.jpg другим значением, например OtherProgram.Jpg. В этот момент вы можете заново зарегистрировать его в своем приложении, установив значение обратно в MyApp.JpegImage.

Отказ от ответственности: При внесении изменений такого рода, пожалуйста, также старайтесь соблюдать предпочтения пользователя. Например, при установке приложения дайте пользователю возможность установить это сопоставление файлов или не устанавливать его. Вы также можете предоставить команду из установленного приложения для сброса ассоциаций, если пользователь пожелает это сделать.

Если вы вместо этого хотите добавить некоторые дополнительные команды к существующему зарегистрированному типу, вы должны прочитать значение по умолчанию клавиши .jpg, чтобы найти имя типа файла. Затем вы можете открыть этот ключ и добавить действие к существующему набору действий. Например, вы можете добавить следующее:

HKCR\ExistingApp.JpegImage\shell\myopen\
    @default = "Open with MyApp"
HKCR\ExistingApp.JpegImage\shell\myopen\command\
    @default = "myApp.exe "%1""
0 голосов
/ 25 ноября 2008

Обратите внимание, что записывая ключ в HKCR, вы фактически пишете в HKLM \ Software \ Classes. Это потребует административных привилегий. Однако вы можете вносить изменения для каждого пользователя в пользовательский контекст, записав вместо этого ключи в HKCU \ Classes \ Root.

Кроме того, пользовательские настройки в HKCU переопределяют системные значения по умолчанию в HKLM, что похоже на проблему.

Это когда программа не зарегистрировала расширение как «По умолчанию» (Программа указана в разделе «Установка программ и значений по умолчанию» на панели управления?)

Время начинать читать документацию !

...