Как установить приложение в качестве программы по умолчанию для открытия файла определенного типа программным способом?
Из моей программы в MFC сгенерирован исполняемый файл, и я хочу использовать его в качестве программы по умолчанию для открытия .jpg
файлы. То есть каждый раз, когда я дважды щелкаю .jpg
файл, моя программа будет работать.
Я пытался добавить ссылки на некоторые записи реестра .jpg
файлы с моей программой, такие как HKEY_CLASSES_ROOT\.jpg\shell\open\command
(установите его значение в "myProgram.exe" "%1"
), а также HKEY_CLASSES_ROOT\myProgram
,
Метод работает просто отлично, за исключением случаев, когда некоторые другие приложения регистрируются, чтобы открыть .jpg
файлы. Например, я установил acdSee на свой компьютер, поэтому каждый раз, когда я нажимаю .jpg
файл, он всегда запускает acdSee вместо моей собственной программы. Но когда я регистрирую совершенно новый тип файла в моей программе, он может быть открыт в программе. Я не знаю, как программно установить мою программу в качестве программы открытия по умолчанию уже зарегистрированного файла. Может ли кто-нибудь помочь мне решить эту проблему? Большое спасибо!
2 ответа
Более типичный / стандартный способ сделать это состоит в том, чтобы установить значение по умолчанию для клавиши ".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""
Обратите внимание, что записывая ключ в HKCR, вы фактически пишете в HKLM\Software\Classes. Это потребует административных привилегий. Тем не менее, вы можете вносить изменения для каждого пользователя в пользовательском контексте, записав ключи вместо этого в HKCU\Classes\Root.
Кроме того, пользовательские настройки в HKCU переопределяют системные настройки по умолчанию в HKLM, что похоже на проблему.
Это когда программа не зарегистрировала расширение в качестве "по умолчанию" (указана ли программа в "Настройка программ и значений по умолчанию" на панели управления?)
Время начать читать документацию!