Как переместить элемент над разделительной линией в новом подменю контекстного меню Windows 10, щелкающего правой кнопкой мыши?
Есть ли в Реестре что-нибудь, что нужно установить?
Как переместить элемент над разделительной линией в новом подменю контекстного меню Windows 10, щелкающего правой кнопкой мыши?
Есть ли в Реестре что-нибудь, что нужно установить?
Создайте подраздел Config
под ключом ShellNew
вашего типа файла. Затем внутри этого подраздела добавьте строковое значение с именем BeforeSeparator
. Изменение должно вступить в силу немедленно:
Чтобы понять это, мне пришлось погрузиться в код проводника. shell32.dll
содержит класс CNewMenu
, представляющий меню «Новое», и имеет функцию с именем _BeforeSeparator
которая определяет, следует ли размещать данную запись перед разделителем. Вот важная часть разборки этой функции (любезно предоставлено IDA):
Сначала он использует PathMatchSpecW
, чтобы увидеть , если имя ключа является одним из .lnk
.library-ms
или Folder
Если это (красный / левый путь), элемент гарантированно появится над линией. Если нет (зеленый / правый путь), функция проверяет, установлен ли определенный бит (10h
) в определенной части (+8
) структуры данных.
Мне нужно было найти код, отвечающий за установку этого бита. Есть функция _GetNewObjectInfoForKey
которая, кажется, отвечает за настройку соответствующих структур данных. Вот часть его разборки, почти в самом начале:
Он пытается открыть подключ с именем Config
и, в случае успеха (красный путь), использует функцию _GetConfigFlags
чтобы установить часть структуры данных, содержащую интересующий нас бит! _GetConfigFlags
тестирование на наличие различных записей и, при необходимости, устанавливает различные биты. Вот часть, которая устанавливает наш целевой бит (10h
):
И там мы видим желаемое имя записи: BeforeSeparator
.