Thaana Paana Ответов: 2

Получить элементы windows щелкните правой кнопкой мыши по порядку с помощью C#


Я хочу вернуть элементы правого клика windows, которые находятся в ключе HKEY_CLASSES_ROOT по порядку. По порядку, например, когда вы щелкаете по папке или определенному расширению, вы получаете разные меню, и они находятся в разных местах в ключе HKEY_CLASSES_ROOT, как windows знает, чтобы вернуть их в порядке при щелчке правой кнопкой мыши, когда они находятся в разных местах? используя vs c# в своем маленьком проекте, я также не могу найти все пункты меню.

P. S: Я молодой программист-хобби и мало что знаю о win shell/script, было бы неплохо, если бы вы могли кратко объяснить или связать тему об этом.

Что я уже пробовал:

Поиск в гугле не помог.
Не могу найти все пункты меню получил только эти 2:

Папку HKEY_CLASSES_ROOT\\раковины
Ключи\каталог\оболочка

2 Ответов

Рейтинг:
4

BillW33

Здесь есть хороший пример того, как перебирать все ключи реестра: https://stackoverflow.com/questions/1458653/iterate-through-registry-entries
Читайте о классе ключа реестра здесь: https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registrykey?view=netframework-4.7.2

Существует несколько клавиш, которые имеют дело с контекстным меню правой кнопки мыши.
Для элементов файла:
CTR\*\shellex\ContextMenuHandlers\
Некоторые дополнительные пункты меню для программ хранятся в этих местах:
Ключ\*\shell
Ключи доступа\AllFileSystemObjects\ShellEx\ContextMenuHandlers

Для элементов папок:
Ключи\папка\shellex\ContextMenuHandlers\
Ключи\каталог\оболочка

Для элементов рабочего стола:
Ключи\каталог\фон\оболочка
Ключи\каталог\фон\shellex\ContextMenuHandlers


Это простая вещь, чтобы получить ключ и цикл по всем подразделам.

using Microsoft.Win32;

        public void EnumerateRegistryKeys()
        {
            RegistryKey key = Registry.<desired root here>.OpenSubKey("<desired key here>");
            foreach (string subKeyName in key.GetSubKeyNames())
            {
                //Do something with subKeyName
            }
        }


В приведенном выше коде вы должны подставить нужный корень и ключ для текста в угловых скобках. Например:
RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Folder\shellex\ContextMenuHandlers\");



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


Thaana Paana

Извините за поздний ответ, Спасибо, это было бы то, что я ищу, хотя я просто отложил этот проект, я сейчас работаю над чем-то другим. После этого я сломаю свои ключи и реестр. Надеюсь, я не испорчу свой компьютер

Рейтинг:
2

Richard MacCutchan

Если вы ничего не знаете об этом предмете, то я бы предложил начать с более простого проекта. Вы можете найти много полезных руководств в разделе https://www.codeproject.com/KB/shell/[^] раздел, или с помощью Google.