Можно создать пункты контекстного меню для проводника Windows для всех файлов, создав записи реестра, такие как
[HKEY_CLASSES_ROOT\*\shell\kdb-test]
@="Test (*,kdb-test)"
[HKEY_CLASSES_ROOT\*\shell\kdb-test\command]
@="cmd.exe /c type %1 & pause"
Также возможно создать их для заданного расширения.заменив \* \
на \.extension\
.
Однако я обнаружил, что последний не работает надежно.Например,
[HKEY_CLASSES_ROOT\.regshelltest\shell\kdb-test]
@="Test (.regshelltest,kdb-test)"
[HKEY_CLASSES_ROOT\.regshelltest\shell\kdb-test\command]
@="cmd.exe /c type %1 & pause"
переопределит различие для *
, как и предполагалось, но выполнение того же для .pdf
или .txt
не будет работать в моей системе.
Документация предлагает в качестве чистого решения использовать косвенную структуру вместо
[HKEY_CLASSES_ROOT\.txt]
@="PlainTextFile"
[HKEY_CLASSES_ROOT\PlainTextFile\shell\kdb-test]
@="Test (PlainTextFile,kdb-test)"
[HKEY_CLASSES_ROOT\PlainTextFile\shell\kdb-test\command]
@="cmd.exe /c type %1 & pause"
, но это тоже не работает.Кроме того, это снижает совместимость, поскольку настоятельно предполагает, что каждый, определяющий такие записи реестра, использует одно и то же имя типа файла для расширения (например, couter-example: .pdf устанавливается на PDFXChangeEdit.PDF
), поэтому определение действий на основе расширения будетпредпочтительнее - особенно для созданных пользователем расширений оболочки.
Аналогичная проблема обсуждалась в « Ключи реестра для записей контекстного меню, но без записей контекстного меню », но там предлагается решениезапросить «ProgID» (т. е. тип имени файла, указанный ключом HKEY_CLASSES_ROOT\.extension
), который у меня не работал.
Есть ли надежный способ создания этих записей контекстного меню на основефайловые расширения, которые не зависят от набора ProgID
?
В качестве обходного пути, в « Добавьте пункт контекстного меню оболочки Windows для определенного расширения (не для типа файла) »Было предложено использовать клавишу \*\
с фильтром AppliesTo
.Однако это скорее обходной путь, чем чистое решение, поэтому я ищу возможность чисто и надежно использовать интерфейс HKEY_CLASSES_ROOT\.extension\shell
.