ファイル タイプ アクションでの Windows ファイル名パラメータの処理

ファイル タイプ アクションでの Windows ファイル名パラメータの処理

HKEY_CLASSES_ROOT の下の any-file キーのシェル サブキーにツールを追加して、任意のファイルの右クリック メニューに表示されるようにしました (ディレクトリ メニューにも表示されます)。

[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ファイルパスがプログラムに渡されるときに引用符が追加されるので、この部分は引用符で囲まないでください。

関連情報