Как исключить приложение из диалогового окна "Открыть с помощью" для несвязанных типов файлов

Когда пользователь пытается открыть файл, который не является членом какого-либо зарегистрированного типа файла (т. е. неизвестного типа файла), или когда пользователь нажимает кнопку Открыть с помощью или Открыть с помощью —> Выбрать программу по умолчанию в контекстном меню файла, в оболочке отображается подменю или диалоговое окно, позволяющее пользователю указать программу, используемую для открытия файла.

По умолчанию любое приложение, зарегистрированное как подраздел HKEY_CLASSES_ROOT\Applications , отображается в диалоговом окне Открыть с помощью. Эти приложения представлены в разделе Открыть с независимо от того, зарегистрировано ли приложение для обработки типа файла.

Чтобы предотвратить появление приложения в диалоговом окне Открыть с помощью, если приложение не должно или не может использоваться для открытия определенных типов файлов, используйте один из двух способов, описанных в этом разделе.

Инструкции

Шаг 1.

Добавьте запись NoOpenWith в подраздел приложения. Если приложение использует тип файла, Windows записывает эти сведения для создания списка Рекомендуемые программы . Этот список представлен в подменю Открыть с помощью следующего снимка экрана.

Снимок экрана: контекстное меню с открытым меню с вложенным меню

Эти рекомендуемые приложения также отображаются в разделе Рекомендуемые программы диалогового окна Открыть с помощью , как показано на следующем снимке экрана.

Снимок экрана: диалоговое окно

Примечание

Если приложение зарегистрировалось в OpenWithList или OpenWithProgIDs для типа файла, оно будет отображаться в списке Рекомендуемые программы , даже если задана запись NoOpenWith. Кроме того, помните, что независимо от того, предлагается ли приложение в списке рекомендуемых программ, пользователь может вручную перейти к любому исполняемому файлу.

 

Приложения могут отключить это отслеживание, указав значение NoOpenWith в подразделе приложения.

Запись NoOpenWith является пустым значением REG_SZ , как показано в следующем примере.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         NoOpenWith

Настройка записи NoOpenWith также имеет следующие эффекты:

  • Запрещает закрепление файла в списке переходов приложения с помощью перетаскивания, если приложение специально не зарегистрировано для обработки этого типа файлов.
  • Запрещает в диалоговом окне общего файла и при любом вызове функции SHAddToRecentDocs добавлять любой файл в список переходов приложения, если приложение специально не зарегистрировано для обработки этого типа файлов.

Шаг 2.

Второй способ предотвратить появление приложения в диалоговом окне Открыть с помощью — использовать подраздел SupportedTypes для явного перечисления расширений типов файлов, которые приложение может открыть. Это предотвращает отображение приложения в диалоговом окне Открыть с помощью для типов файлов, которые оно не может открыть. Это также приводит к тому, что приложение появится в списке Рекомендуемые программы , как обсуждалось ранее.

Этот метод особенно полезен, если приложение может сохранить файл как определенный тип файла, но не может открыть файл этого типа. Приложение также должно задать флаг FOS_DONTADDTORECENT с помощью IFileDialog::SetOptions при вызове диалогового окна Сохранить . Это предотвращает добавление элемента в последние или частые части списка переходов. Он также блокирует отслеживание приложения в разделе OpenWithList.

Каждое поддерживаемое расширение добавляется в виде записи в подразделе SupportedTypes , как показано в следующем примере. Записи имеют тип REG_SZ или REG_NULL без связанных значений.

HKEY_CLASSES_ROOT
   Applications
      ApplicationName
         SupportedTypes
            .ext1
            .ext2
            .ext3

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

Запись NoOpenWith переопределяет подраздел SupportedTypes и скрывает приложение в диалоговом окне Открыть с помощью.