web-dev-qa-db-ja.com

フォルダーのエクスプローラーにコンテキストメニュー項目を追加する方法

レジストリにキーを追加して、Windowsエクスプローラーのファイルに右クリックコンテキストメニュー項目を追加する方法を見つけました。つまりエクスプローラーでファイルを右クリックし、そのファイルに対してカスタムアプリを実行できます。

フォルダに対しても同じことをしたいのですが、それを行う方法はまだ見つかりませんでした。カスタムコンテキストメニューハンドラーの作成/作成に関する記事がありますが、そこには行きたくありません。

カスケードコンテキストメニュー項目をデスクトップとエクスプローラーの「コンピューター」に追加する方法に関する記事 here を見つけましたが、これはどのフォルダーでも機能しません。

カスタムアプリをコンテキストメニューに追加し、ファイルとフォルダーの両方で動作するようにしたいと思います。コンテキストメニューハンドラを作成せずにこれを行う方法はありますか?

79
Elan

左パネルのフォルダーを右クリック Windowsエクスプローラーまたは右パネルのディレクトリの背景のコンテキストメニュー:

  1. HKEY_CLASSES_ROOT\Directory\Background\Shell管理者の場合
  2. HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell通常のユーザーの場合

Windowsエクスプローラーの右パネルでフォルダーを右クリックのコンテキストメニュー:

  1. HKEY_CLASSES_ROOT\Directory\Shell管理者の場合
  2. HKEY_CURRENT_USER\Software\Classes\directory\Shell通常のユーザーの場合

任意のファイルのコンテキストメニュー:

  1. HKEY_CLASSES_ROOT\*\Shell管理者の場合
  2. HKEY_CURRENT_USER\Software\Classes\*\Shell通常のユーザーの場合

すべての場合:

  1. 「シェル」の下に新しいキーを追加し、コンテキストメニュー項目に名前を付けたい名前を付けます。
  2. command(必須名)という名前のこのキー内に新しいキーを追加します
  3. 「コマンド」の「デフォルト」プロパティをmyprogrampath\path\path\executable.exe%1に編集して、選択したファイルのファイルパスと名前をカスタムプログラムに渡す

その他のカスタマイズ:

  • アイコンの追加:アイコンリソースパスに一致する値を持つ、ステップ1で作成されたキーのiconという名前の文字列値を追加します。また、使用するアイコンを指定する整数の引数を指定することもできます。例:%SystemRoot%\System32\Shell32.dll,3
  • Shift-クリックでのみ表示:ステップ1で作成されたキーにExtendedという名前の空の文字列値を追加します
  • メニューエントリラベルのカスタマイズ:ステップ1で作成されたキーのデフォルト値の値を変更します
  • メニューエントリの場所の変更Positionという名前の文字列値を、TopBottomのいずれかで追加します。
171
jumpjack
18
Elan

私は戻って、別の topic でこれに答えました。具体的には、この質問にはそれほど多くはないようです。

最も簡単な方法は、「AppliesTo」というキーに文字列値を追加し、その値を「under:{path}」に設定することでした

私の例では、Tドライブのみを参照するようにしたいので、文字列値は「AppliesTo」:「under:T:」です。

C#では、これは次の方法で簡単に実現できます。

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();

newkey.Close();
_key.Close();
7
Bobby Byrnes

よりクリーンで簡単で高速なソリューションを見つけました:テキストファイルを作成し、これらの内容を入力し、必要に応じて更新し、.regサフィックスで保存して起動します(レジストリのユーザー部分にアクセスするため、管理者権限は不要です) ):

Windows Registry Editor Version 5.00

; Setup context menu item for click on right panel:
[HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; HKEY_CURRENT_USER\Software\Classes\directory\Background\Shell\MenuItemNameBackground]
;"position"="Bottom"

; -------------------------------------------------------------------------------------

; Setup context menu item for click on folders tree item:
[HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel\command]
@="C:\\yourpath\\executable.exe \"%1\""

; Optional: specify an icon for the item:   
; [HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel]
;"icon"="C:\\yourpath\\appicon.ico"

; Optional: specify a position in the menu
; [HKEY_CURRENT_USER\Software\Classes\directory\Shell\MenuItemNamePanel]
;"position"="Top"

このようにして、構成のバックアップを作成することもできます。安全な場所に.regファイルを保存するだけです。ファイルの起動後にレジストリを手動で編集する場合は、右クリックして「エクスポート」を選択します。

パスの二重バックスペースに注意してください:\\

0
jumpjack

私が本当に働いているとわかった唯一の良い解決策は次のとおりです: https://superuser.com/questions/1097054/Shell-context-menu-registry-extension-doesnt-work-when-default-program-is-other

HKEY_CLASSES_ROOT\SystemFileAssociations \your.extension\ Shell\commandにキーを追加します最後のキーを変更したいコマンドで変更します。

私の目的のために:

"C:\Program Files (x86)\GPSBabel\gpsbabel.exe" -r -i gpx -f "%1" -x simplify,count=1000 -o gpx -F "%1.gpx"

それをエクスポートすると、.regが得られます:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.gpx\Shell\Simplify gpx\command]
@="\"C:\\Program Files (x86)\\GPSBabel\\gpsbabel.exe\" -r -i gpx -f \"%1\" -x simplify,count=1000 -o gpx -F \"%1.gpx\""
0
Dorian Grv