プロセスの基本的な概要は、このMSDNの記事に記載されています。重要な部分はリストの一番下にあります:
ProgID(基本的にはファイルタイプレジストリキー)は、アイコン、説明、ファイルをダブルクリックしたときに使用されるアプリケーションなどのコンテキストメニュー項目などの重要なファイルタイププロパティを含むものです。多くの拡張子は同じファイルタイプを持っているかもしれません。そのマッピングは次のステップで行われます。
ここでは、拡張機能のレジストリ値を設定し、その拡張機能のファイルタイプを前の手順で作成したProgIDに設定します。
アプリケーションでファイルを開くために必要な最小限の作業は、2つのレジストリキーを設定/作成することです。このサンプル.reg
ファイルでは、ファイルタイプ()を作成し、blergcorp.blergapp.v1
ファイル拡張子()を関連付けます.blerg
。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]
@="c:\path\to\app.exe \"%1\""
[HKEY_CURRENT_USER\Software\Classes\.blerg]
@="blergcorp.blergapp.v1"
今、あなたはおそらくこれをプログラムで達成したいと思うでしょう。絶対にコッシャーになるために、これらのキーの存在を確認し、それに応じてプログラムの動作を変更することができます。特に、一般的なファイル拡張子の制御を想定している場合はそうです。ただし、SetValue関数を使用してこれらの2つのキーを設定することにより、目標を達成できます。
私は正確なC++構文に肯定的ではありませんが、C#では構文は次のようになります。
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");
もちろん、各サブキーを手動で開き、ProgIDと拡張サブキーを手動で作成してからキー値を設定することもできますが、このSetValue
関数の優れた点は、キーまたは値が存在しない場合、それらが自動的に作成されることです。とても便利な。
ここで、使用するハイブについて簡単に説明します。MSDNの例を含め、オンラインの多くのファイルの関連付けの例では、これらのキーがで設定されていることが示されていますHKEY_CLASSES_ROOT
。これを行うことはお勧めしません。HKEY_LOCAL_MACHINE\Software\Classes
そのハイブは、 (システムのデフォルト)とHKEY_CURRENT_USER\Software\Classes
(ユーザーごとの設定)のマージされた仮想ビューであり、ハイブ内のサブキーへの書き込みは、内の同じキーにリダイレクトされHKEY_LOCAL_MACHINE\Software\Classes
ます。これを行う直接的な問題はありませんが、この問題が発生する可能性があります。HKCR(HKLMにリダイレクト)に書き込み、ユーザーがHKCUで異なる値を持つ同じキーを指定した場合、HKCU値が優先されます。HKEY_CURRENT_USER
したがって、書き込みは成功しますが、設定が設定よりも優先されるため、変更は表示されませんHKEY_LOCAL_MACHINE
。
したがって、アプリケーションを設計する際には、これを考慮に入れる必要があります。HKEY_CURRENT_USER
さて、反対に、ここでの私の例が示すように、あなたはにしか書くことができません。ただし、そのファイルの関連付け設定は現在のユーザーに対してのみ読み込まれ、アプリケーションがすべてのユーザーに対してインストールされている場合、他のユーザーがWindowsでファイルを開いたときにアプリケーションは起動しません。
それはあなたがやりたいことのためのまともな入門書になるはずです。さらに読むために私は提案します
また、同様の質問に対する私の同様の回答も参照してください。