Сочетания клавиш в контекстных меню (Windows 10)

462
jippyjoe4

Итак, я только что создал файл на своем рабочем столе с новым расширением, и вот как выглядит его контекстное меню:

enter image description here

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

Если я создаю файл с именем "item.newextension", а затем импортирую следующий файл реестра:

Windows Registry Editor Version 5.00  [HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.newextension\shell\Edit\command] @="notepad.exe \"%1\""  [HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.newextension\shell\Contemplate\command] @="mspaint.exe \"%1\"" 

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

enter image description here

Если я открою контекстное меню и нажму клавишу «е», блокнот откроется сразу. Кроме того, если я открою контекстное меню и нажму клавишу «c», контекстное меню переключается между «созерцать» и «копировать», но не выбирает ни того, пока я не нажму клавишу ввода.

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

  1. Когда я создаю свои собственные записи контекстного меню, как я это делал в файле .reg, как мне выбрать, какой ключ отвечает за выбор этой записи?
  2. Могу ли я изменить существующие сочетания клавиш для таких вещей, как «Создать ярлык» и «Копировать», или они всегда должны быть «s» и «c» соответственно?

Я на Windows 10 1803 Build 17134 для справки.

2

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

2
Ben N

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

Очевидно, что Windows использует первую букву текста элемента в качестве горячей клавиши. Вы можете переопределить это, поместив амперсанд ( &) перед буквой, которую вы хотите использовать как горячую клавишу. Однако это должно быть сделано в значении по умолчанию ключа реестра команды, а не имени ключа. На этом изображении я попытался изменить горячую клавишу для «Созерцать» Oи «Правку» для I:

using an ampersand in the key name or the default value seems to work

Оба варианта работают так, что приведенная выше конфигурация создает это контекстное меню:

the changes take effect visually

Нажатие Oнемедленно вызывает Созерцание, но нажатие Iничего не делает, хотя никакой другой пункт в моем меню не использует I. Изменение Edit, чтобы иметь имя ключа без амперсанд, но значение по умолчанию Ed&itзаставляет это работать как ожидалось.

Не существует простого способа изменить элементы встроенного контекстного меню, такие как Копировать; они не находятся в реестре и вместо этого создаются Explorer. Возможно, вы сможете написать расширение оболочки, которое использует SetMenuItemInfoсоответствующие информационные структуры меню, чтобы изменить его во время выполнения. Для более старого ответа я написал расширение оболочки для изменения значков встроенных элементов, которые могут быть хорошей отправной точкой.