SSブログ

拡張子の関連付け [日記]

Windowsでは、ファイルの拡張子に、そのファイルを処理するコマンドが関連付けられています。

ですが、関連付けられているコマンドを取得したり、逆に拡張子にコマンドを関連付けたりするAPIが無かったような気がします。

ではどうするかというと、レジストリを直接操作するしかなかったり。

そこで、拡張子から関連付けられているコマンドが決定するまでの流れを調べてみました。

"XXX"という拡張子を例とします。


(1)
次のレジストリキーを探す。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.XXX
(XXXの前に「.」(ピリオド)がある)

キーが存在していれば、(2)へ。
存在しなければ、(6)へ。


(2)
(1)のレジストリキーに、
値フィールド「Application」があれば(3)へ。
値フィールド「Progid」があれば(4)へ。
どちらも無ければ(5)へ。


(3)
(2)の値フィールド「Application」の値を取得する。
この値を仮に "YYY" とする。

次のレジストリキーを探す。

HKEY_CLASSES_ROOT\Applications\YYY\shell

キーが存在しなければ、関連付けられているコマンドは存在しない。

キーが存在していれば、このレジストリキー(仮に"{SHELL}"と呼ぶ)に対して「※」の処理へ。


(4)
(2)の値フィールド「Progid」の値を取得する。
この値を仮に "ZZZ" とする。

次のレジストリキーを探す。

HKEY_CLASSES_ROOT\ZZZ\shell

キーが存在しなければ、関連付けられているコマンドは存在しない。

キーが存在していれば、このレジストリキー(仮に"{SHELL}"と呼ぶ)に対して「※」の処理へ。


(5)
次のレジストリキーを探す。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.XXX\OpenWithProgids
(XXXの前に「.」(ピリオド)がある)

キーが存在しなければ、関連付けられているコマンドは存在しない。

このレジストリキーに存在する値フィールドを探す。

値フィールドが0個の時は、関連付けられているコマンドは存在しない。

値フィールドが2個以上ある時は、そのうちのどれかが選ばれる。どれが選ばれるのかは不明。

この時の値フィールドの名前を仮に "ZZZ" とする。

次のレジストリキーを探す。

HKEY_CLASSES_ROOT\ZZZ\shell

キーが存在しなければ、関連付けられているコマンドは存在しない。

キーが存在していれば、このレジストリキー(仮に"{SHELL}"と呼ぶ)に対して「※」の処理へ。


(6)
次のレジストリキーを探す。

HKEY_CLASSES_ROOT\.XXX
(XXXの前に「.」(ピリオド)がある)

キーが存在しなければ、関連付けられているコマンドは存在しない。

キーが存在していれば、このきーの値を取得する。
このレジストリキーの値を仮に "WWW" とする。

次のレジストリキーを探す。

HKEY_CLASSES_ROOT\WWW\shell

キーが存在しなければ、関連付けられているコマンドは存在しない。

キーが存在していれば、このレジストリキー(仮に"{SHELL}"と呼ぶ)に対して「※」の処理へ。


レジストリキー {SHELL} の値を取得する。
このレジストリキーの値を仮に "AAA" とする。

キー {SHELL} に値が設定されていなければ(AAA が空だったら)、AAA は "open" となる。

次のレジストリキーを探す。

{SHELL}\AAA\command

このキーの値が、拡張子に関連付けられたコマンドである。

ただし、

キーが存在しない or 上記キーの値で指定されているコマンドが存在しない場合、 関連付けられたコマンドが見つかるか、サブキーの候補がなくなるまで繰り返される。

キー {SHELL} のサブキーのうち、まだ調べていないキーを見つける。
仮に "BBB"とする。

どの順番で選ばれるかは不明。ただし open が優先になっているっぽい。

{SHELL}\BBB\command が関連付けられたコマンド


以上

実際にレジストリを弄りながら試した結果なので、正確なところは不明です。
MDSNのどこかに、正式なものの記述でもあれば良いけど


Windows XPで確認してますけど、多分2000でも同じ筈です。
(今更必要あるか謎だけど)Win98は(6)だけです。

(1)~(5)は、ファイルを右クリックして「プログラムの選択」を選んだ時の設定です。
(6)が、エクスプローラのメニューで[ツール]-[フォルダ オプション]を選んで「ファイルの種類」で設定した時の情報です。

[船] 今日の一冊
宇宙神の不思議

宇宙神の不思議

  • 作者: 二階堂 黎人
  • 出版社/メーカー: 角川書店
  • 発売日: 2002/10
  • メディア: 単行本

タグ:Windows
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。