6

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

Таким образом, он выглядит как более полезный аналог строкового значения LegacyDisable , поскольку его можно использовать для отключения функций реестра менее разрушительным образом, чем LegacyDisable .

Однако, как и во многих других парах «значение-данные реестра», трудно найти фактическую документацию о значении и о том, как именно она работает, из Microsoft или других авторитетных источников. Все, что я смог найти за пределами разрозненных постов на форуме, это следующее, из учебника здесь:

ProgrammaticAccessOnly - это специальное значение, которое скрывает запись в контекстном меню, но позволяет программам получать к ней доступ при необходимости.

Это далеко не исчерпывающее, и я сомневаюсь, что область действия значения ограничена контекстными меню. Например, ProgrammaticAccessOnly=Apartment подробно описан здесь, по крайней мере, один раз, без объяснения того, что он делает, или других типов данных.

Как именно работает строковое значение ProgrammaticAccessOnly в реестре? Есть ли какие-то предостережения, чтобы всегда использовать его поверх LegacyDisable? Кроме того, что является списком всех возможных типов данных, которые могут быть использованы с ним?

1 ответ1

5

Я ответил на ваш пост о LegacyDisable и немного разбираюсь в предмете. Поскольку в этом посте нет ответов, я постараюсь, хотя мой ответ может быть неудовлетворительным.

Проблема с этими элементами реестра заключается в том, что они не имеют документов. Каждая новая версия Windows может добавлять новые или лишать законной силы другие. Поскольку они не имеют документов, Microsoft оставляет за собой право свободно изменять то, что ей нравится, поэтому бремя проверки того, работают они по-прежнему или нет, ложится на пользователей.

Информация об этих предметах поступает от Microsoft по неофициальным каналам. Иногда их можно найти в примерах SDK или в MSDN, иногда в ответах на форумах инженеров Microsoft, а иногда от клиентов Microsoft, имеющих привилегированный доступ к инженерам Microsoft.

Я нашел одного человека, который составил список всех известных таких элементов в статье Регистрация типов файлов, каждый с объяснением и ссылкой на документацию. Не удивительно, что большинство предметов не имеют ссылок на документацию.

Что касается ProgrammaticAccessOnly , в этой статье говорится только «Удаляет глагол из перечисления IContextMenu?", но не имеет ссылки на документацию.

Поиск в Google, я нашел статью Winaero, которая говорит:

ProgrammaticAccessOnly делает основной трюк. Это специальный параметр, который сообщает оболочке Windows Explorer, что элемент контекстного меню доступен только программно. Пользовательский интерфейс блокируется, поэтому команда исчезает из контекстного меню!

В совокупности кажется, что эти специальные элементы реестра распознаются интерфейсом IContextMenu, который:

Предоставляет методы, которые либо создают, либо объединяют контекстное меню, связанное с объектом Shell.

Интерфейс IContextMenu экспортируется обработчиками расширений оболочки, в основном используемыми проводником Windows.

Таким образом, присутствие ProgrammaticAccessOnly приводит к тому, что перечисление оболочки игнорирует элемент оболочки, но программы все равно могут ссылаться на него и обновлять его через интерфейс IContextMenu или напрямую, изменяя реестр.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .