1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

コンテキストメニューを作る

Posted at

はじめに

Windowsでディレクトリやファイルを選択、又は背景の位置で右クリックすると"プロパティ"等のメニューが現れます。コンテキストメニューと呼ばれます。

Windows 10まで又はWindows 11の"その他"をクリックした時に現れるメニューは、独自のメニューを追加する事ができます。

レジストリ エディタ

スタートWindows 管理ツールレジストリ エディタ から起動できます。
(起動には管理者権限が必要)

わかりやすい使い方 (Think IT様):

この記事ではレジストリの各キーを操作するための権限について等、レジストリの仕組みについては詳細に触れません。
レジストリの変更はWindowsの動作に影響を与えるため、取り扱いにはご注意下さい。

右クリックの対象

設定できる対象のファイルシステムには、次のようなものがあります。

  • ファイル
  • ディレクトリ
  • ディレクトリの背景
  • ドライブ
  • フォルダ

ディレクトリとフォルダは何が違うの?と思いますが、
フォルダに設定するとディレクトリ、ディレクトリの背景、ドライブ及びライブラリ内の項目にコンテキスト メニューが設定されます。
但しライブラリ以下からコマンドにパスを渡すにはここで紹介する方法ではできません。

設定する対象

対象の利用者は、次のようなものがあります。

  • システム (同じPCを利用する全てのユーザー)
  • ユーザー (現在ログインしているユーザーのみ)

設定方法

設定範囲

まずはシステムに設定するかユーザーに設定するかを考えます。
それぞれの場合によって設定するレジストリのパスが異なります。

  • ユーザーに設定する場合(影響が狭いため推奨)
    HKEY_CURRENT_USER\SOFTWARE\Classes\* / 拡張子 / Directory / Directory\Background / Drive / Folder

  • システムに設定する場合
    HKEY_CLASSES_ROOT\* / 拡張子 / Directory / Directory\Background / Drive / Folder

HKEY_CURRENT_USER\SOFTWARE\Classesに設定したキーはHKEY_CLASSES_ROOTからも見えるようになります。
HKEY_CURRENT_USER\SOFTWARE\Classesに設定したキーをHKEY_CLASSES_ROOTから変更/削除するとHKEY_CURRENT_USER\SOFTWARE\Classesの中身も変更/削除されます。

設定箇所

  • 全てのファイル
    *
  • ファイル
    拡張子 (.txt等)
  • ディレクトリ
    Directory
  • ディレクトリの背景
    Directory\Background
  • ドライブ
    Drive
  • フォルダ
    Folder

設定するキーと値

  • 拡張子\shell\名前\
    • (既定): メニューに表示される名前
    • Icon: アイコン ファイルのパス
      • command\
        • (既定): コマンド

例えば全てのファイルに対し "メモ帳で開く" 設定をユーザーに設定する場合は次のようにします。

メモ帳で大きなファイルを開こうとすると動作が不安定になります。ご注意下さい。

キー 名前 種類 データ
HKEY_CURRENT_USER\Classes\*\shell\mynotepad (既定) REG_SZ メモ帳で開く
(同上) Icon REG_EXPAND_SZ %WINDIR%\System32\notepad.exe
HKEY_CURRENT_USER\Classes\*\shell\mynotepad\command (既定) REG_EXPAND_SZ %WINDIR%\System32\notepad.exe "%V"

又は

キー 名前 種類 データ
HKEY_CURRENT_USER\Classes\*\shell\mynotepad (既定) REG_SZ メモ帳で開く
(同上) Icon REG_SZ C:\Windows\System32\notepad.exe
HKEY_CURRENT_USER\Classes\*\shell\mynotepad\command (既定) REG_SZ C:\Windows\System32\notepad.exe "%V"

command(既定) に設定する"%V"は notepad.exe に渡すコマンドライン引数で、ここに右クリックした時のファイルが入ることによりメモ帳(notepad.exe)がそのファイルを開いてくれます。
コマンドライン引数をどのように扱うかはアプリケーションにより様々です。

%Vではなく%1も使用できますが、ディレクトリの背景等では%1は使えません。

"で囲んでいるのは、例えばC:\My Data.txtのような完全パスに空白を含むファイルから呼び出した場合
C:\MyData.txtという2つのコマンドライン引数に別れてしまうのを防ぐためです。

REG_EXPAND_SZ は、データ内に含まれる環境変数を展開する文字列です。
%WINDIR%は環境変数で、通常はWindows環境ではC:\Windowsに設定されています。
REG_SZ (通常の文字列)では環境変数が展開されないため、正しく動作しません。
レジストリ エディタでキーを作成すると、(既定)の種類が自動的に REG_SZ になってしまい、REG_EXPAND_SZ に変更できません。

そのような場合は、コマンド プロンプトから作成することができます。

REG ADD HKCU\SOFTWARE\Classes\*\shell\mynotepad /t REG_SZ /ve /d メモ帳で開く
REG ADD HKCU\SOFTWARE\Classes\*\shell\mynotepad /t REG_EXPAND_SZ /v Icon /d ^%WINDIR^%\System32\notepad.exe
SET MYVAR=^%WINDIR^%
REG ADD HKCU\SOFTWARE\Classes\*\shell\mynotepad\command /t REG_EXPAND_SZ /ve /d "%MYVAR%\System32\notepad.exe \"%1\""
REG_ADDで使うプレースホルダ レジストリ上のルート
HKLM HKEY_LOCAL_MACHINE
HKCU HKEY_CURRENT_USER
HKCR HKEY_CLASSES_ROOT
HKU HKEY_USERS
HKCC HKEY_CURRENT_CONFIG

^%と記述しているのは、コマンド中で環境変数を展開しないように%をエスケープしている(%を値として認識させる)ためです。
もしも
REG ADD HKCU\SOFTWARE\Classes\*\shell\mynotepad /t REG_EXPAND_SZ /v Icon /d %WINDIR%\notepad.exe
と打ってしまうとコマンド中で環境変数が展開され
REG ADD HKCU\SOFTWARE\Classes\*\shell\mynotepad /t REG_EXPAND_SZ /v Icon /d C:\Windows\notepad.exe
と入力したのと同じになってしまいます。

又、\""をエスケープするための記法です。

"で囲んだ内側で%WINDIR%と記述するとC:\Windowsに展開されてしまい、
^%WINDIR^%と記述するとエスケープを受け付けず^%WINDIR^%がそのままレジストリに書き込まれてしまうため
苦肉の策でSET MYVARで変数MYVAR%WINDIR%を代入し、
REG ADD/d "%MYVAR%\System32\notepad.exeの部分で/d "%WINDIR%\System32\notepad.exeに展開させています。

キーによっては、管理者権限でコマンド プロンプトを実行していないと読み書きができない場合もあります。

image.png

元に戻すには

レジストリ エディタで shell の後(名前) のキーを全て削除します(上記の例で言えば mynotepad の部分)。
コマンド プロンプトからは

REG DELETE HKCU\SOFTWARE\Classes\*\shell\mynotepad

ここで紹介した方法ではできないこと

  • 動的なメニュー
  • Windows 11で採用されたコンテキスト メニュー
  • 複数を選択して1つのアプリケーションで処理をする
    • .zipファイルへの圧縮等。
      この方法では選択したファイルの分だけアプリケーションが起動してしまうので、アプリケーション側でテクニックが必要(ShellExtension等)
  • 管理者権限で開かせる
    • 別途工夫が必要。
      shell\名前HasLUAShield という空の値を作成することで盾付きのアイコンを表示させる事は可能。

さいごに

コマンド プロンプトではなくPowerShellでもレジストリの操作はできます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?