Programming Field

Windows レジストリ 解剖記

このページではWindowsのレジストリについて扱っています。Windowsの重要な設定も含まれているため、レジストリに対する操作は慎重に行ってください。レジストリの操作にあまり慣れていないときは事前のバックアップを強く推奨します。また、不用意にいろいろなデータを削除するとWindowsが起動しなくなる原因となります。なお、このページで生じた問題の責任は負いかねます。

目次

HKEY_CLASSES_ROOT

このキーには関連付け情報やCOM/OLEで利用されるクラス情報などが登録されています。主にシェルや複数のアプリケーションで共有される情報が含まれます。

なお、このキーはHKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classesを組み合わせた内容で、直接 HKEY_CLASSES_ROOT にキーや値を登録した場合は HKEY_LOCAL_MACHINE\Software\Classes 以下に登録したものと見なされます。また、両方に同じ値(キー)がある場合は HKEY_CURRENT_USER 側の情報が優先されます。

使用上の補足

HKEY_CLASSES_ROOT とユーザー別/システム全体設定

ログインユーザーとは異なる環境(セキュリティコンテキスト)を用いるようなプログラムでは、レジストリの操作時に HKEY_CLASSES_ROOT を直接使うべきではありません。代わりにシステム全体設定であれば HKEY_LOCAL_MACHINE\Software\Classes、ユーザー別設定であれば RegOpenUserClassesRoot 関数を用いた操作(大雑把には HKEY_USERS\xxxx\Software\Classes 以下を扱いやすくする関数)を使うようにしてください。(本ページでは説明の都合上両者に登録できる内容を HKEY_CLASSES_ROOT の説明としてまとめています。)

また、そうでないプログラムであっても、明示的に「システム全体に設定を行いたい」「ユーザー別に設定を行いたい」という場合は、やはり HKEY_CLASSES_ROOT ではなくそれぞれの対応するキーを使うのが適しています。なお、データの読み取りに関してはこの限りではなく、現在のユーザー・システム全体への設定がまとめられた HKEY_CLASSES_ROOT を使うのが推奨されます。

「TrustedInstaller」によるアクセス制限

[Windows NT系(XP?以降)] 一部のキーはフルコントロールのアクセス権が「TrustedInstaller」に対してのみとなっている場合があります。この場合管理者権限でも書き換えを行うことができません(UACによる権限昇格を行ったインストーラーで操作できます)。多くの場合 HKEY_LOCAL_MACHINE\Software\Classes 以下に登録されているキーに対してそのセキュリティ設定が付与されていますが、その場合は同名のキーを HKEY_CURRENT_USER\Software\Classes 以下に作ることでユーザー別の設定として上書きすることができます(例: Windows 10 15063 以降でディレクトリの右クリックメニューにコマンドプロンプトを表示させる(暫定))。もちろんシステムワイドに設定することは出来ませんが、むしろ「システムワイドに設定することは推奨されていないもの」と捉えた方が無難です。

「TrustedInstaller」の権限を無理やり消すような操作は推奨できません。

「既定のプログラム」設定

[Windows Vista?以降] 「既定のプログラム」としての関連付け情報は HKEY_LOCAL_MACHINE\Software\RegisteredApplications 以下のキーを用いて設定することが推奨されています。HKEY_CLASSES_ROOT 直下への ProgID の追加のみでも機能する場合がありますが、RegisteredApplications を使えば「対応可能な拡張子の一覧」などの情報を含めることができます。

[Windows 10?] 「既定のプログラム」の書き換え(ユーザー別の UserChoice の変更)はレジストリの直接変更で行うことはできません(特殊な権限設定がなされています)。システム既定の設定を登録するという面では従来通り HKEY_CLASSES_ROOT 以下への設定は効きますが、PerceivedType 設定や前記の RegisteredApplications などで(対象の拡張子に)他のプログラムの候補が考えられる場合、最初の既定のオープン操作の前にシステムによって選択ダイアログが表示されます。

(参考: Announcing Windows 10 Insider Preview Build 10122 for PCs | Windows Experience Blog内「Changes to how Windows 10 handles default apps」)

HKEY_CLASSES_ROOT 内の .extキー

このキーは「ファイルの関連付け」を表します。このキーに登録できる主な内容は以下の通りです。

  • .ext = <description>
    • shell
      • command-name = <command-display-name>
        • command = <command-line>

command-name」には「open」など作成したいコマンドの名称を設定します。この名前に基本的に制限はありませんが、他のものと重複しないようにします。そして「<command-display-name>」には、右クリックしたときに表示するコマンドの名前を指定します(MUIVerbも参照)。なお、「open」や「print」など特定の名称を「command-name」に指定すると、「<command-display-name>」を指定しなくても自動的に使用している言語に合った表示名が使用されます。

<command-line>」には、実行するコマンドライン(プログラム名や「%1」といった文字列)を設定します。「%1」は、コマンドが実行されるタイミングで実際に開くファイル名に置き換わります。例として、メモ帳を開くコマンドの場合は「"C:\WINDOWS\NOTEPAD.EXE %1"」のように指定します。

コマンドラインに指定できるプレースホルダー

<command-line>」に指定できる「%1」などの文字列(プレースホルダー)と、それらが置き換えられる値は以下の通りです。

%1ファイル名(フルパス)が入ります。DesktopBackgroundDirectory\Background など、選択した項目が存在しない場合に %1 を使用するとアクションの実行に失敗します。
%2printto の場合プリンター名が入ります。スクリプトファイルなどで引数を伴ってコマンドが実行された場合はファイル名に続く最初の引数が入ります。
%3printto の場合ドライバー名が入ります。スクリプトファイルなどで引数を伴ってコマンドが実行された場合はファイル名に続く2番目の引数が入ります。
%4printto の場合ポート番号が入ります。スクリプトファイルなどで引数を伴ってコマンドが実行された場合はファイル名に続く3番目の引数が入ります(以降、%9 まで使用できます)。
%*%2 以降の引数がスペース区切りでまとめて入ります。引数が8個(%9 相当)よりも多く指定された場合でもそれらが含まれます。
%Dファイルのデスクトップからの相対パスが入ります(IShellItem::GetDisplayNameSIGDN_DESKTOPABSOLUTEPARSING を指定して取得できるパスが入ります)。仮想アイテムである場合はGUID文字列が含まれるパスとなります。
%H「0」が入ります。(詳細不明; 16進数)
%IITEMIDLIST (IDLIST_ABSOLUTE) データを指す共有メモリのハンドルと、そのハンドルを作成したプロセスIDが入ります。「:<handle>:<pid>」の形式(いずれも10進数)となります。利用できない場合は「:0」が入ります。
%Lファイル名(フルパス)が入ります。DesktopBackgroundDirectory\Background など、選択した項目が存在しない場合に %L を使用するとアクションの実行に失敗します。
%Sウィンドウの表示状態(SW_* の値)が入ります。起動時に「SW_SHOWNORMAL」が指定されていれば「1」が入ります。
%U[Windows 7 以降] 対象の IShellItem から IPropertyStore を取得し、PKEY_ExpandoProperties に含まれる OriginURL プロパティーの値を %U にセットします。
%Vファイル名(フルパス)が入ります。%L が使用できる場合は同じ値が、使用できない場合は %W と同じ値が入ります。
%W作業ディレクトリ名が入ります(この値は NoWorkingDirectory の影響を受けません)。対象アイテムがファイルシステムではない場合にこの指定子があるとアクションの実行に失敗します。

[Windows 7 以降] DesktopBackgroundDirectory\Background に対して「%D」および「%U」を使用すると(IShellItem が存在しないため)クラッシュします。
※ 「%I」が指す共有メモリのハンドルは、非公開関数である「SHAllocShared」によって作成されるものであり、別プロセスからアクセスする場合は非公開関数の「SHMapHandle」でプロセス内に複製する必要があります。
[Windows 7 以降?] 「%I」が指す <handle> が呼び出し元エクスプローラー上のメモリブロックのアドレスとなっており、別プロセスから SHMapHandle で複製できないようです(SHAllocShared の内部実装で複製可能なハンドルを作成していないようです)。そのため、DelegateExecute などの(エクスプローラーと同一プロセスになる)COMオブジェクト経由でないとアクセスできない模様です。(Vistaでは問題ありません。)

簡易的に関連付けを作成する場合はこれだけで可能ですが、アプリケーションによる(インストール時などにおける)関連付け登録においては、ユーザーが任意に関連付け先を切り替えられるようにするため、「<description>」に適当な名前を設定し、その名前を HKEY_CLASSES_ROOT の中にキーとして改めて登録しています。形式としてまとめると以下の通りです。

  • .ext = "extfile"
  • .ext2 = "extfile"
  • extfile = <description>
    • shell
      • open
        • command = <command-line>
      • other-command-name = <command-name>
        • command = <command-line>

(「extfile」の中の情報は、上記と同じなので省略します。)
この形式では、「.ext」の既定の値を「extfile」とし、さらに「extfile」というキーを作成しています。これにより、「.ext2」のように他の拡張子を持つファイルを同じ種類のファイルに設定することができます。(extfileが1つの「ファイルの種類」を表すこととなります。)

また、「.ext」の中に書き込めるデータとして、以下のものがあります。

(val) Content Type
ファイルの MIME タイプを指定します。例えば通常のテキストなら「text/plain」、HTML なら「text/html」などです。なお、Internet Explorer はこの値を利用しないようです。
OpenWithList
ファイルを右クリックして出る「プログラムを指定して開く」の一覧や、「ファイルを開くアプリケーションの選択」ダイアログボックスに入るアプリケーションを登録します。ここと「HKCU\Software\...\FileExts キー」の登録内容を合わせたリストが実際に表示されます。
ここに登録するには、「Applications キー」への登録も必要です。
<Application> はアプリケーション名またはプログラムのファイル名を指定します。この中に、開く方法を指定するための「shell」キーを登録することも可能で、登録しない場合は Applications キーの登録内容を使用します。
OpenWithProgids
[Windows Vista 以降] ファイルを右クリックして出る「プログラムを指定して開く」の一覧や、「ファイルを開くアプリケーションの選択」ダイアログボックスに入るアプリケーションをProgIDで登録します。「OpenWithList」と異なり、以下の「. で始まらない通常のキー」の名前(ProgID)をキー内の値として登録することで、アプリ選択の一覧に表示させることができ、かつ既定のプログラムとして選択した際にそのProgIDを拡張子に割り当てることができます。
(val) PerceivedType
[Windows XP 以降] この拡張子のファイルを、登録されている種類に関連付けます。これにより、同じ種類に指定したファイルタイプは同じコマンドを持つことができます。詳しくは「SystemFileAssociations キー」をご覧ください。
ShellNew
何もないところを右クリックすると出る「新規作成」に追加します。この中では以下の5つの値のうち 1つを必ず選びます
名前説明
NullFile 空のファイル (0 バイト) を作成します。値の内容は無視されます。
FileName 値の内容で指定されたファイル名のコピーを作成します。パスが指定されていない場合、「C:\WINDOWS\ShellNew」や「C:\WINDOWS\Templates」(Windows NT/2000/XP 以降の場合は「C:\Documents and Settings\user\Templates」)からファイルを探します。なお、見つからない場合は空のファイルが作成されます。
Command 値の内容で指定されたコマンドを実行します。コマンドの中に、「%1」(%2 も?)を入れることができ、これは、新しく作成するファイル名を指しています。
Data [Windows XP 以降] 指定したバイナリデータを持つファイルを作成します。値の内容がそのままファイルデータとなります。
Directory [Windows Vista 以降] ファイルの代わりにディレクトリを作成します。値の内容は無視されます。
[Windows 95/98/Me] ShellNew を登録しても反映されない時は、ShellNew Manager の修復機能をご利用ください。
さらに、ShellNew以下には以下の値を含めることができます。
(val) Handler
[Windows Vista 以降] ファイル作成時に呼び出すCOMクラスのCLSIDを指定します。このCOMクラスはINewObjectHandlerインターフェイスを実装している必要があります。
(val) IconPath
[Windows Vista 以降] 項目名の横に表示するアイコンを指定します。指定方法はDefaultIconと同様です。この値が存在しない場合はファイルの種類に設定されている DefaultIcon のアイコンが使用されます。
(val) ItemName
[Windows Vista 以降] 新しく作成するファイルの名前(拡張子を除く)を指定します。指定方法は「リソースから値を取得させる方法」での方法に限られます。この値が指定されていない、またはリソース指定以外の書式、リソースからテキストを取得できなかったなどの場合は「新規 xxx」(xxxはファイルの種類を表すもの)という名前が使用されます。
(val) MenuText
[Windows 7 以降] 「新規作成」メニューに並ぶ項目で表示するテキスト(項目名)を指定します。指定方法は「リソースから値を取得させる方法」での方法に限られます。この値が指定されていない、またはリソース指定以外の書式、リソースからテキストを取得できなかったなどの場合はファイルの種類名が使用されます。
(val) NonLFNFileSpec
[Windows 7 以降] (未確認)「長いファイル名」が使用できない場合に使用するファイル名を指定します。指定方法は「リソースから値を取得させる方法」での方法に限られます。
(val) NoExtension (Configキー以下)
[Windows Vista 以降] ShellNew以下にConfigキーを作成してこの値を作成すると、ファイルを作成したときに拡張子を付加しません。
(val) NoEmptyFile (Configキー以下)
[Windows 7 以降] ShellNew以下にConfigキーを作成してこの値を作成するとファイルを作成しなくなります。Handlerが指定されていないとエラーとなります。

さらに、「extfile」以下にはさまざまな情報を指定することができます。その詳細は以下のセクションを参照してください。

それ以外の通常のキー

キー名が「.」(ドット)から始まらない通常のキーは、上述のファイルの関連付けに用いるほか、COMにおけるクラスの定義なども行います。これらの名前を、ProgID(Programmatic Identifier)と呼びます。

このキーに書き込める値については「関連付け設定として設定可能なキー・値」をご覧ください。

SystemFileAssociations キー

[Windows XP 以降] このキーでは、拡張子の垣根を越えてファイルの種類を設定します。通常の登録方法とは違い、拡張子それぞれに割り当てられたファイルの種類に追加して登録するような形が行えます。この内容は以下の通りです。

SystemFileAssociations の中にはファイルの種類(に似たもの)を登録します。<type> が実際のタイプの名称になり、あらかじめ登録されているものとして「text」や「system」などがあります。<type> は上述の ProgID と同様に関連付けに関する記述を行うことができます。例えば、shell キーや DefaultIcon キー、NoOpen などをここに含めることができます。また、OpenWithList や OpenWithProgids も有効です。

ここに登録を行うと、後述する「PerceivedType」で指定したファイルすべてにこれらの関連付け設定が反映されます。ただし、元のファイルに既に「shell」キーの同じ名称のデータが存在する場合や、DefaultIcon の設定が行われている場合などは、そちらが優先されます。

なお、定義済みの名称(「text」、「system」、「image」など)以外はうまく反映されないようです。

また、SystemFileAssociations の中にも拡張子(<type> の先頭をピリオド「.」にする)を登録することができます。この場合はもちろん設定内容が該当する拡張子のファイルに対して適用されるようになります。拡張子別に TileInfoPreviewDetails などを指定したい場合は SystemFileAssociations 内に拡張子のキーを作成する方法が採られます。

HKEY_CLASSES_ROOT 内の特殊なキー

以下に挙げるキーが HKEY_CLASSSES_ROOT 内に存在しており、COMのクラスやインターフェイスの管理や、特定のアイテムに対して関連付け設定を行うためなどに用いられます。

*
このキーは「すべての拡張子」に対する関連付け設定を表し、ここの下の内容はフォルダー以外すべてに適用されます。例えば、この中には「アプリケーションから開く」で、登録されているプログラムと「プログラムの選択」というメニューを表示させるためのデータ(shellex 内)が入っています。
Applications
このキーにはアプリケーションの実行可能ファイル名(.exeファイル)が登録されます。主に実行可能ファイルの名前や説明、既定の動作を登録し、それらは「ファイルを開くプログラムの選択」などで使用されます。
Applicationsには「関連付け設定として設定可能なキー・値」で説明しているものや以下のキー及び値を登録することができます。
shell
「shell」キーとそれに付随するコマンドのキーを登録すると、「ファイルを開くプログラムの選択」でプログラムを選択して開く際に「選択したプログラムをいつも使う」をチェックしているときにこの「shell」キー以下の内容が新しく関連付けを作成するときに使用されます。
(val) NoOpenWith = ""
「ファイルを開くプログラムの選択」の一覧に表示されなくなります。
(val) NoStartPage = ""
[Windows 7 以降] タスクバーやスタートメニューにピン留めすることができなくなります。
(val) IsHostApp = ""
[Windows 7 以降] 「ホストアプリ」として認識させます(rundll32.exeやdllhost.exeなどが該当します)。ホストアプリは単体で起動してもタスクバーやスタートメニューにピン留めすることができなくなりますが、ショートカットから引数付きで起動された場合はピン留めすることができます(引数がない場合はピン留めできません)。
AppID
このキーの中は、TypeLibと同じようですが、GUID 以外にアプリケーションの名前自身も登録されています。これらは、OLE で使われます。
AllFilesystemObjects
このキーの内容は、ファイルシステムに相当するもの(フォルダーやファイルを指し、ドライブは入りません)に適用されます。例えば、この中には「送る」メニューを表示させるためのデータ(ShellEx 内)が入っています。
CLSID
(CLSIDClass IDの略)
このキーの中には、膨大な数のGUIDが登録されています。この中のデータはCOMで使用され、それぞれのデータに基づいて DLL が呼び出されます。
DeviceDisplayObject
[Windows 7 以降] 「デバイスとプリンター」内に表示されるアイテムに適用するアクション(ショートカットメニュー)などを種類別に定義します。「AllItems」以下には種類に関係なくすべてのアイテムに対して適用される内容を、「HardwareId」や「InterfaceClass」以下にはそれぞれ対応するアイテムのキーを作成しそれぞれ固有のアイテムに対して適用される内容を登録します。
AllItems」や「HardwareId\<hardware-id>」、「InterfaceClass\<interface-clsid>」以下に作成する「shell」キー以下は「関連付け設定として設定可能なキー・値」で説明しているものとほぼ同一の内容が登録可能です。
Installer
アプリケーションのインストールやアンインストールに際に用いられる情報が含まれます。Windowsインストーラーなどで使用されます。
Interface
このキーの中には、CLSIDと同じように膨大な数の GUID(IID) が登録されています。
Licenses
このキーの中は GUID が登録されており({} は無い)、これらの GUID と同じ物を持つコントロール(OCX)を利用する際に必要な「ライセンス キー」が登録されています。
MIME
このキーの中は、文字セット、コードページ、Content Typeが登録されています。特に Content Type は拡張子が関連付けられおり、ブラウザーで使用されます。(実際はここを利用していない?)
Printers
[Windows Vistaまで?] エクスプローラーの「プリンター」内に表示される個々のプリンターに適用されるアクション(shellキー以下の内容)やShell拡張などを定義します。
Protocols
このキーの中は、http や file などのプロトコルが登録されており、URLを開く際に実行するアクションをプロトコルごとに定義しています。これらを利用する時は、URLの定義に従い「http:」のように付けます。
TypeLib
このキーの中には、CLSIDと同じようにいくつかの GUID が登録されています。こちらは、アプリケーションや DLL などのライブラリを表す GUID が登録されます。
Unknown
このキーの内容は、.extが存在しないすべての拡張子に適用されます。例えば、この中には「アプリケーションから開く」コマンド(shell 内)が入っています。
AudioCD
CDを認識するデバイスにオーディオCDをセットした場合に、対応するドライブをエクスプローラー上で扱い際に利用される関連付け設定です。
DesktopBackground
[Windows 7] 「デスクトップ」のアイコン以外の部分を右クリックしたときに出るメニューの項目を制御します。
Drive
「ドライブ」(ローカル ディスク)を指すファイルの種類です。この中に登録された情報は「ドライブ」に対して適用されます(アイコン情報がドライブの既定のアイコンに利用されたり、右クリックしたときのメニューに追加されたりします)。
Directory
説明が「ファイル フォルダー」となっているファイルの種類です。ここに登録された情報はドライブとフォルダーの両方に適用されます(それぞれ Drive および Folder に登録された情報と組み合わせて利用されます)。
Directory\Background
エクスプローラー上でフォルダー(およびドライブ)内のアイコン以外の部分を右クリックした際に表示される内容を扱います。
DVD
DVDを認識するデバイスにDVDをセットした場合に、対応するドライブをエクスプローラー上で扱い際に利用される関連付け設定です。
Folder
「フォルダー」を指すファイルの種類です。Drive キーと同様、「フォルダー」に対する関連付け情報を登録する際に利用されます。

関連付け設定として設定可能なキー・値

HKEY_CLASSES_ROOT 直下のキーや SystemFileAssociations 以下のキーなどは、前述の通りファイルの関連付け設定で用いられる情報を持ちます。これらのキーで設定可能な主なデータは以下のようなものがあります。

※ 以下のデータは、一部「.ext」の中にも書き込めますが、ProgIDとして定義されたキーに書き込まれることが推奨されます。

<description>
このクラス(またはファイルの種類)を端的に表す内容を記述します。例えば、class-name が「exefile」なら「アプリケーション」といった具合です。
(val) AllowSilentDefaultTakeOver
[Windows 8 以降] 「プログラムを開く」で既定のプログラムとしてこのProgIDを無視する(表示させない)ようにします。
(val) AlwaysShowExt
この値を設定すると、「登録されているファイルの拡張子は表示しない」が指定されていても、常に拡張子を表示します。なお、値の内容は無視されます。
(val) ContentViewModeForBrowse
[Windows Vista 以降] この値は、エクスプローラーでの表示モードが「コンテンツ」のときに表示される項目を決定するために使用されます。指定する値は「prop:」と表示したいプロパティー名です。また、「delta」モードで表示されるときには縦に2個・横に3個並べて表示される(縦に2個並ぶと次の項目が横に来ます)ため、部分的に空白にしたい場合は該当する箇所に「System.LayoutPattern.PlaceHolder」を指定します。なお、プロパティー名の前に「~」(チルダ)を指定するとプロパティーの種類名(「更新日時」という文字列など)が表示されなくなります。
(val) ContentViewModeForSearch
[Windows Vista 以降] この値は、エクスプローラーの「検索結果」での表示モードが「コンテンツ」のときに表示される項目を決定するために使用されます。指定方法は ContentViewModeForBrowse と同じです。
(val) ContentViewModeLayoutPatternForBrowse
[Windows Vista 以降] この値は、エクスプローラーでの表示モードが「コンテンツ」のときに表示される項目のレイアウト(並び順)を決定するために使用されます。指定できる値は「Alpha」「Beta」「Gamma」「Delta」です(大文字・小文字は区別されません)。それぞれのレイアウトの詳細については「How to Register a Unique Content View Set of Properties and Layout Pattern for the File Type or Item (MSDN)」をご覧ください。
(val) ContentViewModeLayoutPatternForSearch
[Windows Vista 以降] この値は、エクスプローラーの「検索結果」での表示モードが「コンテンツ」のときに表示される項目のレイアウト(並び順)を決定するために使用されます。指定方法は ContentViewModeLayoutPatternForBrowse と同じです。
(val) EditFlags
設定の「ファイルの種類」/「ファイル タイプ」(以下「ファイルの設定」)で表示する時や、ファイルを開く時の動作などにいろいろな効果をつけます。DWORD 値で、以下の数値を足して組み合わせて指定します。(FILETYPEATTRIBUTEFLAGS の値)
名前説明
FTA_Exclude = 0x00000001 (1) ファイルの設定に拡張子を表示させないようにします。
FTA_Show = 0x00000002 (2) 拡張子が割り当てられていなくてもファイルの設定に表示させるようにします。
FTA_HasExtension = 0x00000004 (4) (調査中、効果なし?)
FTA_NoEdit = 0x00000008 (8) ファイルの設定で「詳細設定」をできなくします。
FTA_NoRemove = 0x00000010 (16) ファイルの設定で削除できなくします。(動作しない?)
FTA_NoNewVerb = 0x00000020 (32) ファイルの設定で新しい動作を追加できないようにします。(動作しない?)
FTA_NoEditVerb = 0x00000040 (64) ファイルの設定で「open」や「print」などの動作を編集できないようにします。
FTA_NoRemoveVerb = 0x00000080 (128) ファイルの設定で「open」や「print」などの動作を削除できないようにします。
FTA_NoEditVerb = 0x00000100 (256) ファイルの設定で、ファイルの種類を表す文字列を編集できないようにします。
FTA_NoEditIcon = 0x00000200 (512) ファイルの設定で、アイコンを編集できないようにします。
FTA_NoEditDflt = 0x00000400 (1024) ファイルの設定で「標準」(既定の動作)を変更できないようにします。(動作しない?)
FTA_NoEditVerbCmd = 0x00000800 (2048) ファイルの設定で「アプリケーション」の欄を変更できないようにします。(動作しない?)
FTA_NoEditVerbExe = 0x00001000 (4096) ファイルの設定で動作を追加/削除できないようにします。(動作しない?)
FTA_NoDDE = 0x00002000 (8192) ファイルの設定で、DDE コマンドを変更できないようにします。(動作しない?)
FTA_NoEditMIME = 0x00008000 (32768) ファイルの設定で、Content-type (MIME タイプ)を変更できないようにします。(動作しない?)
FTA_OpenIsSafe = 0x00010000 (65536) ダウンロードするファイルが「安全に」開けると示します。
FTA_AlwaysUnsafe = 0x00020000 (131072) ダウンロードするファイルが常に危険を伴う可能性のあるファイルであることを示します。この値を指定すると FTA_OpenIsSafe を無効化します。
FTA_AlwaysShowExt = 0x00040000 (262144) 常に拡張子を表示させるようにします。(現在は削除されており動作しません。下の AlwaysShowExt を使用してください。)
FTA_NoRecentDocs = 0x00100000 (1048576) ファイルを開いても「最近使ったファイル」に追加されないようにします。
FTA_SafeForElevation = 0x00200000 (2097152) [Windows 8 以降] 信頼性の低い処理から開いても安全である(セキュリティリスクがない)ファイルタイプであることを示します。このフラグがセットされていない場合、ファイルを開くためのアプリケーションが一定の権限を必要としており、そのファイルを開くアプリケーションや開くための処理が低い信頼性で動作していると、ファイルを開く処理がブロックされ失敗します。
FTA_AlwaysUseDirectInvoke = 0x00400000 (‭4194304‬) [Windows 8 以降] サーバー上のファイルに対し、サーバーからのレスポンスヘッダーにファイルを直接実行(direct invoke)する指定がない場合でも直接実行を行います。
(val) ExtendedTileInfo
[Windows Vista 以降] (詳細不明、本来は TileInfo の拡張で2行にわたって詳細表示を行う際に用いられるものだったものの使用されなくなった模様です)
(val) FriendlyTypeName
この値は、上述の <description> をリソースから取得する場合に使用します。これを行うことで、ファイルの種類などの説明を、言語に応じて表示させることができます。この値の指定方法にはリソースから値を取得させる方法も利用できます。
(val) FullDetails
[Windows Vista 以降] この値には、ファイルのプロパティーを開いた際に存在する「詳細」タブに表示する項目を指定します。「prop:」で始まる、ファイルの種類特有のプロパティー名、汎用プロパティー名、および以降のプロパティーをグループ化するためのプロパティー名をセミコロン区切りで指定します。また、値が無い場合にその項目を表示させたくない場合は、そのプロパティー名の先頭に「*」を付加します。
(val) InfoTip
この値は、エクスプローラのステータスバー上やツールチップ(マウスカーソルを合わせるなどすると表示されるもの)上などでファイルの説明表示に使用されます。指定する値は、説明となる文字列を直接入力するか、FriendlyTypeName と同様の値も指定できます。
さらに「prop:」で始まる値を指定した場合は、セミコロンで区切られた説明の形式を指定します。セミコロンで区切る項目は、選択されたファイル固有の情報の名称で、「Size」「Type」や「DocTitle」(OLE ファイル)、「FileDescription」(実行可能ファイル)などです。(例: "prop:Type;DocAuthor;DocTitle;DocSubject;DocComments;Write;Size")
(val) IsShortcut
この値を設定すると、アイコンにショートカットを表す矢印が追加されます。なお、値の内容は無視されます。
(val) NeverShowExt
AlwaysShowExt と反対で、「登録されているファイルの拡張子は表示しない」が指定されていなくても、常に拡張子を表示しません。なお、値の内容は無視されます。
(val) NoOpen
ファイルを「アプリケーションから開く」で開こうとした時に、値の内容で指定されるメッセージを表示し、注意を促します。値の内容が指定されていない場合、「システムに悪影響を及ぼす」などのメッセージとなります。
(val) NoRecentDocs
[Windows 7 以降] この変数が存在する場合(値は空でよい)、ファイルを開いても「最近使ったファイル」に追加されないようにします。これはEditFlagsFTA_NoRecentDocsと同じです。
(val) PreviewDetails
[Windows Vista 以降] この値には、エクスプローラーの詳細ウィンドウ(プレビューウィンドウではありません)に表示される項目のうち、PreviewTitleの横に表示される項目を指定します。「prop:」と表示させたいプロパティー名をセミコロン区切りで指定します。
例として「prop:System.PropGroup.FileSystem;System.ItemNameDisplay;System.DateModified;*System.FileOwner」と指定すると、「System.PropGroup.FileSystem」がグループ化するプロパティー名であるため、「ファイル」というグループの中に「項目名」(System.ItemNameDisplay)、「更新日時」(System.DateModified)、「所有者」(System.FileOwner)が表示されます。このうち「所有者」は、値が存在しなければ表示されません。
(val) PreviewTitle
[Windows Vista 以降] この値には、エクスプローラーの詳細ウィンドウ(プレビューウィンドウではありません)に表示される項目のうち、アイコンのすぐ右側に表示されるタイトルとなるものを指定します。「prop:」と表示させたいプロパティー名を最大2つまで(セミコロン区切りで)指定します。1つも指定しない場合はタイトルとしてファイル名が使用され、2つ指定された場合は1つ目がメインのタイトル、2つ目がサブタイトルのように表示されます。
(val) QuickTip
InfoTip とほぼ同じですが、ネットワーク上のファイルなど情報の取得に時間がかかる可能性がある物に対して InfoTip の代わりの用いられます。
(val) SetDefaultsFor
[Windows Vista 以降] ファイルのプロパティーを初期化する際に最初からセットするべき値の種類を定義します。Windows Shellの「SHAddDefaultPropertiesByExt」関数を使用することで SetDefaultsFor に指定されたプロパティーの種類とその値を IPropertyStore に格納することができます。なお、種類に対応する値(既定値)はシステムによって決定されます。
(val) TileInfo
[Windows XP 以降] この値は、エクスプローラの「並べて表示」でのファイルの説明表示に使用されます。指定する値は InfoTip と同じです。
(val) TypeOverlay
[Windows XP 以降] 画像のサムネイル表示を行う際、サムネイルの上にアイコンを表示するかどうかを制御します。
(値の登録なし)ファイルのアイコン(DefaultIcon で設定されるものなど)がサムネイルの上に表示されます。
(空欄)サムネイルの上にアイコンを表示しません。
<resource-reference>「リソースから値を取得させる方法」での指定方法を用いた値を設定すると、対応するアイコン画像がサムネイルの上に表示されます。
(val) URL Protocol
このファイルの種類が URL プロトコルとして使用できることを示します。これは、アドレスバーに「class-name:」と入力し、コロンの後に何か文字を入れると、動作の「open」が実行されます (%1 はコロンの前も含みます)。
CLSID
このキーの既定値は、HKEY_CLASSES_ROOT 以下の特殊なキーCLSID」に定義されているCLSIDを指定します。このキーが指定されていると、COM オブジェクトと ProgID が関連付けられ、ProgID から CLSID を取得することができます。
なお、ファイルの種類として class-name を定義している場合、CLSID は大抵シェル拡張を使用してファイルを処理しているか、OLE として編集や挿入ができるファイル形式で用いられることが多くみられます。(これらではCOMオブジェクトを作成するため CLSID が必要となってきます。)
CurVer
このキーの既定値は、ProgIDのバージョン管理を行うために使用されます。例えば、(class-name が)「Word.Document」というキーには CurVer があり、もし Microsoft Office がインストールされていると、既定値が「Word.Document.7」や「Word.Document.12」などとなり、エクスプローラーや COM は CurVer に指定されているキーを参照します。
DefaultIcon
ファイルを表示する際のアイコンを指定します。このキーの既定の値に、「アイコンのファイル名」と、コンマ(「,」)で区切ってアイコンのインデックスを指定します。アイコンのファイル名は EXE ファイル、DLL ファイル、ICO ファイルなどで、インデックスは「何番目のアイコンか」を指定します。インデックスを負の数値(マイナスの数値)で指定すると、この数値の絶対値はアイコンのリソース ID を表すようになります。
なお、もともとアイコンを持つ exe ファイルや ico ファイル、ShellEx で IconHandler を使用している場合は、この値は「%1」となります。
ShellEx
ドラッグ ドロップや、アイコン、右クリックメニューなどに特殊な動作を入れる時に使います(プラグインのようなもの)。DLLを利用してファイル固有の特殊な動作を行いたいときに使用されます。(詳しい説明は省略)
shell
アイテムに対するアクション(動作; verb)を定義します。アクションはエクスプローラー上で右クリックした際にメニューとして表示されます。
shell の中にアクションに対応するキー(any-command-name = <command-name>)を作成し、その中にアクションの挙動を示すキーや値を追加・設定します。なお、「<command-name>」が原則としてアクションの表示名になります。
(val) FriendlyCache (shell 内)
Applications」キー内のアプリケーションを定義するキーの中で効果があります。「ファイルを開くアプリケーションの選択」で表示する時のプログラムの説明を設定します。
※ この値は shell の直下に設定します。
(val) AppliesTo (shell\any-command-name 内)
[Windows 7 以降] このコマンドを表示させる条件をAQS書式で指定します。この条件に一致しない項目においてはコマンドが表示されなくなります。
(val) CommandFlags (shell\any-command-name 内)
[Windows 7 以降] アクション項目に対するフラグを指定します。ExtendedSubCommandsKey が指すキー内や「CommandStore」の中で利用できます。指定できる値は EXPCMDFLAGS の値ですが一部は効果がない可能性があります(参照: IExplorerCommand::GetFlags method)。
(val) DefaultAppliesTo (shell\any-command-name 内)
[Windows 7 以降] この値にAQS書式を指定すると、この条件に一致した項目においては該当するコマンド(この値が含まれるキーのコマンド)が既定のコマンドとなります。
(val) ExplorerHost (shell\any-command-name 内)
[Windows 7 以降] ファイルを開く際にコマンドの代わりに呼び出すCOMクラスのCLSIDを指定します。このCOMクラスはIExplorerHostインターフェイスかIExplorerHost2インターフェイスを実装している必要があります。
(val) Extended (shell\any-command-name 内)
[Windows 2000?/XP 以降] 右クリックで表示する時、Shift キーを押しているときだけ、このコマンドを表示させるようにします。例としては、Windows 2000 では、Shift キーを押したままプログラムを右クリックすると、「別のユーザーとして実行」というコマンドが現れます。
(val) ExtendedSubCommandsKey (shell\any-command-name 内)
[Windows 7 以降] 値に指定された場所をキー名とし、その中に存在する「shell」キー以下のアクションを本アクションのサブアクションとして利用します。ExtendedSubCommandsKey には HKEY_CLASSES_ROOT 以下のキーを指定します。例として「SystemFileAssociations\text」を指定すると、「SystemFileAssociations\text\shell」に定義されているアクションをサブアクションとして利用します。
※ ファイルのような相対パス表記は利用できず、HKEY_CLASSES_ROOT をルートとするパスで記述する必要があります。
※ MSDNのドキュメントには「ExtendedSubCommandsKey」はサブキーとして作成すると記述されていますがこれは誤りです。
(val) HideInSafeMode (shell\any-command-name 内)
[Windows 7 以降] セーフモード時はこのアクションを表示させません。
(val) HasLUAShield (shell\any-command-name 内)
[Windows 7 以降] この値にAQS書式を指定すると、この条件に一致した項目においては該当するコマンド(この値が含まれるキーのコマンド)がメニュー項目として表示されるときに盾のアイコンが表示されます。
(val) Icon (shell\any-command-name 内)
[Windows 7 以降] メニュー項目の横に任意のアイコンを表示させます。書式はDefaultIconと同様です。
(val) MUIVerb (shell\any-command-name 内)
[Windows 2000?/XP 以降] <command-name>の代わりに表示する(メニュー項目の)名前を設定します。この値の指定方法にはリソースから値を取得させる方法も利用できます(<command-name>でも利用可能)。
(val) MultiSelectModel (shell\any-command-name 内)
[Windows 7 以降] 複数アイテム選択におけるアクションの扱いを指定します。以下のいずれかを指定します。
Single単一のアイテムのみを開くアクションとして扱います。2つ以上のアイテムを選択するとアクションが表示されなくなります。
Document個々のアイテムに対してウィンドウ(トップレベルウィンドウ)を開くアクションとして扱います。大量のウィンドウを開くことでリソースを消費することを防ぐため、同時に選択できるアイテムは15個までとなり、16個以上のアイテムを選択するとアクションが表示されなくなります。
Player複数のアイテムを同時に開くことができるアクションとして扱います。従来の「command」を指定するアクションにおいては上限は100個となりますが、COMクラスを用いるアクション(DropTargetやDelegateExecuteなどを利用するもの)においては上限がなくなります。
(指定なし)未指定の場合、COMを利用するアクションにおいては「Player」、それ以外の(従来の)アクションにおいては「Document」であるとみなします。
(val) NoWorkingDirectory (shell\any-command-name 内)
[Windows Vista 以降] コマンドとしてプログラムを実行させる際に作業ディレクトリ(working directory)を継承させないようにします。これを指定しない場合は、例えばエクスプローラーのフォルダー内からファイルを開いた場合、原則として作業ディレクトリはそのフォルダーとなります。
(val) Position (shell\any-command-name 内)
[Windows 7 以降] アクションのサブメニューにおける表示位置を指定します。「Top」または「Bottom」が指定可能であり、「Top」は項目の先頭、「Bottom」は末尾の位置となります。
※ 他のProgIDとの組み合わせになる場合は組み合わせる前にTopやBottomの位置が計算され、ここで先頭になったアクションよりも手前の位置に次に組み合わせるProgIDのアクションが入ります。
(val) ProgrammaticAccessOnly (shell\any-command-name 内)
[Windows Vista 以降] 指定のアクションをプログラムからの実行でのみ利用できるようにします(エクスプローラー上では表示されないようにします)。指定できる値は空白または「Apartment」となります。
※ 指定できる値の詳細は未調査です。
(val) SubCommands (shell\any-command-name 内)
[Windows 7 以降] サブアクションを定義します。サブアクションはエクスプローラーではサブメニューとして表現されます。サブアクションを指定するには「HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore」の shell キー以下に定義されたコマンド名をセミコロン「;」区切りで1つまたは複数指定します。なお、区切り線は「Windows.separator」というコマンド名で表現されます。
command (shell\any-command-name 内)
アクション選択時に実行するコマンドを定義します。<command-line> にコマンドラインを指定すると(CreateProcess を介して)コマンドの実行が行われます。指定できるプレースホルダー(「%1」など)は「コマンドラインに指定できるプレースホルダー」をご覧ください。
(val) DelegateExecute (shell\any-command-name\command 内)
[Windows 7 以降] COM/OLEに登録されているCLSIDを指定すると、プログラム実行の代わりに対応するCOMクラスを読み込んで実行します。COMクラスはIExecuteCommandやIObjectWithSelectionインターフェイスを実装している必要があります。
なお、DelegateExecute 指定時は <command-line> の指定は不要です。
ddeexec (shell\any-command-name\command 内)
[非推奨: 新しいプログラムではDropTargetを使います] ファイルを開くなどの動作を DDE(Dynamic Data Exchange) 通信で行います。これは、同じアプリケーションを実行している時に、新たにもう1つ起動することなく、ファイルを開く動作を行うことができます。(この「通信」とはプロセス間通信のことであり、インターネットなどネットワーク経由の通信ではありません。)
ddeexec の中に、「application」や「topic」のキーを置くことがあります。これらはDDEを解釈するアプリケーションによって利用されます。
DropTarget (shell\any-command-name 内)
[Windows Vista 以降] command の代わりに IDropTarget を実装したクラスを実行します。このキーがあるアクションを実行すると、Explorerは「DropTarget」キー内の「CLSID」で指定したCOMクラスを作成し、IDropTarget のメソッド(Drop)を実行します。

リソースから値を取得させる方法

一部の値では、多言語に対応させるためにDLLなどのリソースから値を取得させるように指定することができます。その書式は以下の通りです。

@<file-name>,<value>

<file-name> にはリソースを所有するファイル名(EXE、DLL など)、<value> には文字列リソースのIDが絶対値となる負の値(IDが101なら「-101」)を指定します(例: "@%SystemRoot%\system32\notepad.exe,-469")。ただし例のように文字列に環境変数を含める場合は REG_EXPAND_SZ (「展開可能な文字列」)で変数を作成します。

AQS書式と利用可能なプロパティー

※ 未調査です。

書式の詳細は「Using Advanced Query Syntax Programmatically」、Windowsシェル上で利用可能なプロパティーの一覧は「Windows Properties」をご覧ください。