1

Как переместить элемент над разделительной линией в новом подменю контекстного меню Windows 10, щелкающего правой кнопкой мыши?

Есть ли в Реестре что-нибудь, что нужно установить?

Пример меню правой кнопки мыши

1 ответ1

1

Создайте подраздел Config под ключом ShellNew вашего типа файла. Затем внутри этого подраздела добавьте строковое значение с именем BeforeSeparator . Изменение должно вступить в силу немедленно:


Чтобы понять это, мне пришлось погрузиться в код проводника. shell32.dll содержит класс CNewMenu , представляющий меню «Новое», и имеет функцию с именем _BeforeSeparator которая определяет, следует ли размещать данную запись перед разделителем. Вот важная часть разборки этой функции (любезно предоставлено IDA):

Сначала он использует PathMatchSpecW , чтобы увидеть , если имя ключа является одним из .lnk .library-ms или Folder Если это (красный / левый путь), элемент гарантированно появится над линией. Если нет (зеленый / правый путь), функция проверяет, установлен ли определенный бит (10h) в определенной части (+8) структуры данных.

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

Он пытается открыть подключ с именем Config и, в случае успеха (красный путь), использует функцию _GetConfigFlags чтобы установить часть структуры данных, содержащую интересующий нас бит! _GetConfigFlags тестирование на наличие различных записей и, при необходимости, устанавливает различные биты. Вот часть, которая устанавливает наш целевой бит (10h):

И там мы видим желаемое имя записи: BeforeSeparator .

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