Изменить мнемонику для «переместить на onedrive» в контекстном меню проводника Windows

Изменить мнемонику для «переместить на onedrive» в контекстном меню проводника Windows

Я не хочу удалять «переместить на onedrive», просто убираю мнемонику M, которая дублирует мнемонику «переименовать».

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

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

решение1

Я нашел ключ реестра, который добавляет Move to OneDriveв контекстное меню элементы файлов: HKEY_CURRENT_USER\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\ FileSyncEx со значением по умолчанию: {CB3D0F55-BC2C-4C1A-85ED-23ED75B5106B}

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

Итак, чтобы добиться желаемого поведения, отключите «встроенное», Move to OneDriveотредактировав (Default)данные вышеуказанного ключа, добавив в начало любой случайный символ(ы). Я использую:
XXX {CB3D0F55-BC2C-4C1A-85ED-23ED75B5106B}

введите описание изображения здесь

и затем воссоздать его через пользовательский пункт контекстного меню с другой мнемоникой. Сохраните следующее как .regфайл и объедините.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\MoveToOneDrive]
@="Move to OneDrive"
"Icon"=hex(2):25,00,4c,00,6f,00,63,00,61,00,6c,00,41,00,70,00,70,00,44,00,61,\
  00,74,00,61,00,25,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,\
  74,00,5c,00,4f,00,6e,00,65,00,44,00,72,00,69,00,76,00,65,00,5c,00,4f,00,6e,\
  00,65,00,44,00,72,00,69,00,76,00,65,00,2e,00,65,00,78,00,65,00,2c,00,30,00,\
  00,00

; Icon=%LocalAppData%\Microsoft\OneDrive\OneDrive.exe,0

; pure com objects
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\MoveToOneDrive\Command]
@="PowerShell.exe -WindowStyle Hidden -Command \"gi -LiteralPath '%1' | sv 'File' ; ($comFolder = ($shell = New-Object -com shell.application).NameSpace('shell:OneDrive')).MoveHere($file.FullName) ; $comFolder.Self.InvokeVerb() ; (@($shell.windows()).Where({$_.LocationName -eq $comFolder.Title}))[0].Document.SelectItem($comFolder.ParseName($File.Name),17)\""

; String construction
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\MoveToOneDrive\xxCommand]
@="PowerShell.exe -WindowStyle Hidden -Command \"($comFolder = $shell.NameSpace('shell:OneDrive')).MoveHere('%1') ; Invoke-Expression ('explorer /select,{0}{1}{0}' -f [char]34 , ( Join-Path  $comFolder.Self.Path ( '%1'.Split('\\')[-1] )))\""

; First draft
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\MoveToOneDrive\xCommand]
@="PowerShell.exe -WindowStyle Hidden -Command \"($comFolder = (New-Object -com shell.application).NameSpace('shell:OneDrive')).MoveHere('%1') ; $comFolder.Self.InvokeVerb()\""


Вы увидите синюю вспышкуPowerShellокно, которое беспокоит некоторых, и может быть устранено некоторыми трюками, с которыми я никогда не заморачиваюсь. Синяя вспышка дает знать, что оно работает! :D

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

Связанный контент