このページの本文へ

前へ 1 2 次へ

Windows Info 第65回

最新のWindowsにおけるファイルの関連づけを分析する

2016年07月16日 12時00分更新

文● 塩田紳二 編集● ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows 8までのファイルの関連付け

 ファイルの関連付けは、基本的にはレジストリの登録で行なわれる。これには3つの方式がある。便宜上、この3つの方式を「XP方式」「Vista方式」「8方式」と呼称する。

 XP方式は、最も単純な方式で、今でもこのやり方でデータファイルを登録するアプリも少なくない。というのも、実は関連付けに対して、MSDNなどに古いものを含め、複数のドキュメントが存在し、どれが現時点での「標準的」な方法であるのかがわからない状態だからだ。とはいえ、Windows自体には互換性があり、最も古いXP方式で登録を行ってもちゃんと動作する。実際には、XP以前に確立した方式で、XP以前にも何回か変更があったのだが、すでに情報も失われているため、とりあえずXPの時点でのやり方を1つの方法とした。

 XP方式では、レジストリにある拡張子を示すキーに対してアプリの起動方法などを設定する仕組みだ。具体的には、「HKEY_CLASSES_ROOT」以下にピリオドを先頭につけた拡張子をキーとして登録していく。たとえば、テスキトファイルを示す「txt」という拡張子の場合「.txt」がキーとなる。

 もっもと単純な方法では、拡張子キーの下に一定のキーを作り、起動プログラムなどを定義する。このときのレジストリ設定には下の表のようなものを使う。

キー 名前 解説
HKEY_CLASSES_ROOT\[拡張子] (既定値) ファイルタイプキーやProgIDキーを定義する。ここを定義するとshellキー以下が無視される
ContentType HTTPなどで扱う場合のMIMEタイプを指定
PerceivedType Windows検索のKindで指定されるファイルの種類
OpenWithList 使われない
OpenWithProgids 対応可能なアプリをProgIDで指定(複数可)

 しかし、現在では、ファイルタイプキーやProgIDキーにアプリケーションの起動方法などを定義し、拡張子キーの既定値にProgIDを定義する方法が一般的だ。

 ProgIDとは「Programmatic Identifiers」の略である。ProgIDは、同じくHKEY_CLASSES_ROOT直下に定義されるピリオドで始まらないキーで定義する。ここには、ProgID以外のキーもあるが、ProgIDは、キー名に一定のルールがある。ただし、長い時間を経て使われてきたものであるため、ProgIDのルールを使わないものもある。

 当初は、このやり方は「ファイルタイプ」と呼ばれていた。たとえば、.txtという拡張子に「textfile」というファイルタイプを関連付けておき、ファイルタイプ側で、起動するアプリなどを切り替える方式だった。これは、単一のファイル形式を複数の拡張子に適用する場合などに便利な方式だった。現在でもこのやり方で関連付けを定義するためのコマンドとしてassoc、ftypeコマンドが残っている。

 assoc、ftypeコマンドは、具体的には「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」にある拡張子キーに対して動作する。HKEY_CLASSES_ROOTは、このHKEY_LOCAL_MACHINE\SOFTWARE\Classesと、HKEY_CURRENT_USER\SOFTWARE\Classesを合成して作られるレジストリになっている。前者は、マシン全体(つまりすべてのユーザー)が対象で、後者は個々のユーザーごとの設定値になる。通常の操作は、HKEY_CLASSES_ROOTで行って問題はないのだが、変更は、HKEY_CURRENT_USER側になる。

 これに対してassoc、ftypeコマンドでは、HKEY_LOCAL_MACHINE\SOFTWARE\Classesしか見なし、変更もこのキー側になる。このため、HKEY_CLASSES_ROOTを直接編集した場合、それはassoc、ftypeコマンドでは表示されないので注意されたい。コマンドラインから行えるためある意味便利なのではあるが、XP以前に確立された古いやり方でしか記述ができず、変更が、全ユーザーに及ぶことを考えると、あまり使うべきではないと考えられる。

 ファイルタイプは、1つのアプリ定義を複数の拡張子に適用するときにコマンド記述を繰り返さないすむため、assoc、ftypeコマンドが主要な方法だった時期には便利なやり方だった。しかし、同種アプリの異なるバージョンが同居した場合や、アプリの起動方法が複雑になる(たとえば、アプリを構成するCOMコンポーネントを呼び出してファイルを処理するなど)に従い、単純なコマンドラインの記述では対応が難しくなってきた。そこで登場したのがProgIDだ。

 以後、話を簡単にするためにProgID形式で定義されたキーをProgIDキー、ファイルタイプ形式で定義されたキーをファイタイプキーと呼ぶ。なお、実際には両者は明確な区別がなく、サブキー以下の項目が混在していても動作する。

 もっとも単純な構造は、ファイルタイプとして用いられてきたキー構造だ。

キー 名前 解説
HKEY_CLASSES_ROOT\[ファイルタイプ] (既定値) ファイルタイプの名称
…\shell\[動詞]\Command (既定値) 動詞に対応するコマンドラインを定義。ファイルタイプキーの定義でも有効。動詞キーの既定値が表示名となり、日本語表記などを定義可能
…\shell\[動詞]\DropTarget clsid ドラッグドロップを処理するコンポーネントのID。ファイルタイプキーの定義でも有効
…\DefaultIcon (既定値) データファイルに使われるアイコン(リソース形式)

 ここではコマンドライン形式のプログラム起動方法が利用できる。これは、以下のようにShellキーのしたに「Open」、「Edit」、「Print」などの「動詞」に相当するキーを付け、さらに「command」キーを置き、その既定値で実行コマンドを定義する方法だ。

 具体的には、

HKEY_CLASSES_ROOT\.Sample
    @=SampleFType

HKEY_CLASSES_ROOT\SampleFType\
    DefaultIcon\
        @=c:\data\app.icon
    shell\
        edit\
            command\
                @=app.exe /edit %1
        open\
            command\
                @=app.exe /open %1
注:@=は既定値

 という形になる。なお、この方式を使うことで、エクスプローラーでデータファイルを右クリックすると、コンテキストメニューに「編集」や「開く」といった項目が表示されるようになる。メニューに日本語などを表示させたい場合、動詞キーの既定値に文字列を指定すると、これがメニューで使われる。

 ただし、現在マイクロソフトは、オプションとして以下のURLで示すキーを利用できるとしている(https://msdn.microsoft.com/en-us/library/windows/desktop/cc144148(v=vs.85).aspx

 なお、ContentTypeキーは、Webサーバーで扱う場合に拡張子からMIMEタイプを判別する場合に、PerceivedTypeは、Windowsの検索機能で、対象のKindを指定したときの判定に使われるものだ。前者は、同じPCでWebサーバーを動作させている場合に、後者は、Windowsの検索機能で複雑な検索条件を指定した場合にしか使われないため、設定しなくても特に問題が起きることはない。

 また、著名な形式、たとえばテキストファイルや画像ファイルの場合、すでに設定が行われているので、これを書き換えないように注意するだけでいい。

 なお、ProgIDの場合には、以下のURLにキー構造の説明がある(https://msdn.microsoft.com/en-us/library/windows/desktop/cc144152(v=vs.85).aspx)。

キー 名前 解説
HKEY_CLASSES_ROOT\[ファイルタイプ] (既定値) プログラムを表示するときの名称(Windows2000以降で有効)
…\DefaultIcon (既定値) データファイルに使われるアイコン(リソース形式)
…\FriendlyTypeName (既定値) プログラムの表示名(リソース形式)。こちらが指定されていると既定値の表示名は使われない
…\InfoTip (既定値) ToolTipsの表示内容
…\EditFlags (既定値) ファイルタイプアトリビュートフラグ
…\AppUserModelID (既定値) ジャンプリストの制御(Windows7以降で有効)
…\AllowSilentDefaultTakeOver (既定値) ProgIDを無視するかどうか(Windows 8以降で有効)
…\CurVer (既定値) アプリの最新バージョンのProgID

 この形式を使ってもかまわないが、手作業でやるには結構複雑になる。既存のキーをエクスポートして書き換え、インポートして設定すると少し作業がラクになる(キー名の書き換えを確実にすること)。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,980
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,100
7
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥1,880
8
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
¥1,899
9
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥4,918
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン