Как изменить порядок элементов в новом меню Проводника в Windows 10?

390
Saud Iqbal

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

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

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

1

1 ответ на вопрос

1
Ben N

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


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

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

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

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

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

+1 за сборку. Изменения в реестре контекстного меню могут быть применены при перезапуске Проводника (без перезагрузки). Biswapriyo 5 лет назад 0