ZYV0 Ответов: 2

Контекстное меню Windows - видимость элемента (если буфер обмена содержит текст)


Экран
Я работаю над приложением для копирования и вставки имен файлов. У меня уже есть рабочее контекстное меню с небольшими подаппами (написанными на c#), но я хотел бы, чтобы параметры вставки были видны только в том случае, если буфер обмена содержит какой-то текст. Как это сделать? Можно ли добавить что-то в реестр?

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

Я понятия не имею. Ключи в реестре Windows ниже.
Контекстное меню раздела реестра:
[HKEY_CLASSES_ROOT\*\shell\CopyPasteFileName]
"SubCommands"="cfn;cfp;pfn;pfnne"
"icon"="C:\\Users\\KN\\Desktop\\files\\icon.ico"
"Position"="Bottom"

Вставить ключи имени файла:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\pfn]
@="Paste Filename"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\pfn\command]
@="C:\\Program Files\\CopyPasteFileName\\pfn.exe \"%1\""

Другие пункты меню имеют аналогичные клавиши

2 Ответов

Рейтинг:
17

Dave Kreskowiak

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

Единственный способ сделать это-написать расширение оболочки. Это далеко не тривиальный фрагмент кода для написания. К счастью, здесь есть пара серий статей на CP, которые охватывают это, например .NET Shell Extensions - контекстные меню оболочки[^] и Расширения оболочки проводника в .NET (пересмотрено)[^].


Рейтинг:
0

Dave Kreskowiak

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

Чтобы сделать то, что я думать он хочет, ему придется написать расширение оболочки.