Обработка параметров имени файла Windows при действии типа файла

Обработка параметров имени файла Windows при действии типа файла

У меня есть инструмент, который я добавил в подраздел оболочки ключа any-file в разделе HKEY_CLASSES_ROOT, чтобы он появлялся в контекстном меню любого файла (он также есть в меню каталогов).

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard]
@="Path -> Clipboard"

[HKEY_CLASSES_ROOT\*\shell\PathToClipboard\command]
@="C:\\Program Files (x86)\\PathToClipboard.exe %1"

Инструмент не делает ничего, кроме копирования указанного параметра (пути к файлу) в буфер обмена.

Это работало годами, по крайней мере, со времен Win ME (возможно, с тех пор перекомпилировалось). Это также работает для Win-7, но с некоторыми особенностями: если путь к файлу содержит пробелы или любые другие небуквенно-цифровые символы, он сокращается до имени, совместимого с DOS.

Например:C:\PROGRA~2\PATHTO~1.EXE

Есть ли способ обойти это?

Если я "укажу %1путь, то он будет правильным, но Windows также передаст его "программе (которую я не трогал довольно давно. Конечно, я мог бы решить эту проблему в инструменте, но мне интересно, можно ли исправить это грубое поведение на стороне Windows).

решение1

Если имя программы содержит пробелы или другие небуквенно-цифровые символы, оно сокращается до имени, совместимого с DOS.

@="C:\\Program Files (x86)\\PathToClipboard.exe %1"

В кавычки следует заключать отдельные части, а не всю строку целиком.

В этом конкретном случае следует указать только первую часть (название программы)ився строка:

@="\"C:\\Program Files (x86)\\PathToClipboard.exe\" %1"

Примечание:

  • \используется для экранирования внутренних кавычек (вокруг имени программы)
  • Если вы также заключите в кавычки %1(путь к файлу), то кавычки будут добавлены при передаче пути к файлу в программу, поэтому не заключайте эту часть в кавычки.

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