Windows 秘話

[ファイルの種類] ダイアログ ボックスの変遷

Raymond Chen

Windows 95 の時代、[フォルダ オプション] ダイアログ ボックスには [ファイル タイプ] タブがありました (現在は [ファイルの種類] ダイアログ ボックスです)。このタブには、登録されているすべてのファイルの種類と関連するアクションが表示されていました。今月のコラムでは、この機能の遷移を紹介します。

世の中は変化し、このタブに表示されていた情報は正確なものではなくなりました。

実際のところ、このタブに表示されていた情報は、Windows 95 のときでさえも完全に正確というわけではありませんでした。

[ファイル タイプ] タブでは、いわゆる静的登録のみをサポートしていました。静的登録とは、コマンド ラインまたは DDE コマンドを実行するアクションのことです。Windows 3.1 では、この 2 通りの静的登録が、ファイルの種類のアクションを登録する唯一の方法でした。そのため、[ファイル タイプ] タブの機能は一応流行して、ほんのつかの間だけ脚光を浴びました。しかし、その後、Windows 95 シェル名前空間が登場し、まったく新しい一連の方法が提供されるようになりました。たとえば、シェル コンテキスト メニュー ハンドラー (IContextMenu) を使用して追加されたアクションは、[ファイル タイプ] タブには表示されませんでした。ドライブで使用できるアクション (コマンド) から、このことを確認できます。[ファイル タイプ] タブで確認できるのは "検索" というアクションだけでした。フォーマット、ディスクのコピーなどのアクションは、COM オブジェクトによってプログラムで提供されるため、このタブには表示されませんでした (特に、このようなアクションは特定のドライブの種類にしか適用されないので、このような仕様になっていました)。

現在、[ファイルの種類] ダイアログ ボックス (旧 [ファイル タイプ] タブ) は少々厄介なことになっています。というのも、コンテキスト メニューのコマンドがどこにも格納されておらず、コードによって実行時にシェル拡張内で作成されているからです。そのため、コンテキスト メニューの拡張機能に、"アイテムに追加される可能性があるすべてのアクションの一覧を提供してください" と要求する方法がありません。1 つの理由は、コンテキスト メニューの拡張機能自体が、その一覧を把握していないからです。一部のコンテキスト メニューの拡張機能では、ユーザーがクリックしたファイル名に基づいてアクションを作成します。また、ショートカットには、特定のアクションの一覧やアクションのパターンがありません。ショートカットは、単に他のファイルの種類に関連付けられているアクションを公開しているに過ぎません (たとえば、テキスト ファイルのショートカットを右クリックすると、コンテキスト メニューにはテキスト ファイルに関連付けられているアクションが表示されます。ショートカットのコンテキスト メニュー ハンドラーで、可能性があるすべてのアクションの一覧を生成しなければならないと、すべてのファイルの種類に関連付けられているすべてのアクションを一覧表示する必要があります)。

特定のファイルの種類に関連のあるアクションの完全な一覧を取得する方法があったとしても、アクションを追加または変更するインターフェイスはまったく役に立たないでしょう。シェル拡張は COM オブジェクトなので、登録はファイルの種類に GUID を割り当てることによって行われます。ご想像どおり、コンテキスト メニューのアクションを作成するには、ユーザーはさまざまな句読記号を使用して 32 進数でアクションを入力することになります。ですが、これはアクションを登録するだけで、IContextMenu インターフェイスを実装した DLL を作成する必要があります。この手順について、ぜひオンライン ヘルプの記事を執筆していただければさいわいです。健闘をお祈りします。

結局、シェル名前空間の拡張機能が [ファイルの種類] ダイアログ ボックスに表示されないのは、得策だったかもしれません。では、DDE コマンドについてはどうでしょうか。DDE は Dynamic Data Exchange の略称ですが、名前からは何もわかりません。DDE は Windows 3.0 の時代に開発されたデータ転送メカニズムです。このメカニズムにより、2 つのプログラム間でデータを交換したり、相互にコマンドを送信することが可能になりました。いわゆる DDE 対話を確立するには、多数の情報が必要です。この情報は、[ファイル タイプ] タブからアクセスできる [アクションの編集] ダイアログ ボックスの [DDE メッセージ]、[アプリケーション] (名前から推測できますが、これは実行可能ファイルの名前ではありません)、[DDE アプリケーションが実行していないとき]、および [トピック] ボックスに、わかりづらい言葉で表示されます。これらの言葉は、どれも普通のユーザーにとっては意味がありません。魔法の呪文 1 ~ 4 と呼んでも問題ないくらいです。

DDE は一昔前のテクノロジで、複数のタスクを並行処理しようとしていた時代に設計されました。当時は、コードが実行されているということは、他のプロセスでもメッセージを処理しているということだったので、アプリケーションがメッセージの処理を停止してしまうことを懸念する必要はありませんでした。しかし、32 ビット版の Windows に移行し、マルチタスクが主流になると、この想定は適切ではなくなりました。特に、メッセージの処理を停止するアプリケーションでは、メッセージ ブロードキャストが完了することを妨げるので、DDE で問題が発生します。というのも、DDE 対話を確立する最初の手順で、対話を求めるウィンドウを検出するメッセージをブロードキャストしているからです。1 つでも応答しないプログラムがあると、DDE ベースのドキュメントを開くことができません。このため、DDE は、シェルのアクションを登録する手段として推奨される方法ではなくなりました。

[ファイルの種類] ダイアログ ボックスの仕様を変更する決定打となったのは、Windows Vista で導入されたユーザー アカウント制御 (UAC) です。ファイルの種類の登録はコンピューター全体にかかわる操作なので、変更するには管理者特権が必要でした (ですが、既定では管理者特権は無効になっています)。そのため、[ファイルの種類] ダイアログ ボックスの設定を操作するには、権限の昇格が必要でした。[ファイルの種類] ダイアログ ボックスが、普通のユーザーにとっては不完全で使用できない周知の事実で、通常、ファイルの種類はアプリケーションによって正常に登録されるので、[ファイルの種類] ダイアログ ボックスで権限の昇格をサポートする追加作業は必要ないように思えました。以前、[ファイルの種類] ダイアログ ボックスで提供されていた機能は、"プログラムから開く" やコントロール パネルの "ファイルの種類またはプロトコルのプログラムへの関連付け" 機能と大幅に重複しています。これらの機能は、暗号のような名前の 4 つの編集ボックスに魔法の呪文を入力するよりも、はるかに簡単に使用できます。

ただし、RegEdit を実行して、ファイルの種類を昔の方法で作成することは可能です。その際には、あの魔法の呪文の設定方法を思い出していただければさいわいです。

 

Raymond Chen は自分の Web サイト「The Old New Thing (英語)」および同じタイトルの書籍 (Addison-Wesley、2007 年) で、Windows の歴史、Win32 プログラミング、疑問符で文を始めることについて扱っています。

 

関連コンテンツ