特にWindows 7について言及しています。
次のページで webJose によって提案されているように、特定の拡張子をアプリケーションに関連付けるコードがあります: ファイル拡張子の関連付けを担当するレジストリ キーは何ですか? (ただし、提案されているように、HKEY_CLASSES_ROOT の代わりに HKEY_CURRENT_USER\Software\Classes に正しく書き込みます)
上記は最初に機能するか、拡張機能に関連付けられている他のプログラムがない場合に機能します。ただし、Windows 7 に組み込まれている [既定のプログラムを選択...] (ファイルを右クリックして表示されるコンテキスト メニューの [開く] の下にあります) を使用すると、選択した新しいプログラムに拡張機能が再度関連付けられます。
この時点で何が起こるかというと、「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\\UserChoice」がシステムによって変更されるため、新しく選択されたプログラムが引き継がれます。
上記のコードを実行して拡張機能の制御を取り戻すことはできません。制御を取り戻す唯一の方法は、次のいずれかです。
- UserChoice -> Progid 値の編集。これは許可されていません (プログラムでも regedit.exe を使用しても - アクセスが拒否されました)。
- または、UserChoice 値を削除し、アプリケーションが \OpenWithList の下の MRUList 値の最初にあることを確認します (これは regedit.exe を使用して実現できますが、プログラムでは実現できません)。
私の質問は: プログラムでこれを達成する方法はありますか? 別のプログラムに関連付けられた後、拡張機能の制御を取り戻すために変更できるレジストリ値はどれですか?
ユーザーがエクスプローラーを介して関連付けられたアプリケーションを拡張機能に設定した場合、拡張機能を別のアプリケーションに再度関連付けるために同じ方法を再度実行することが期待されることは明らかです。
ただし、問題は、上記のコードを使用してアプリケーションとの拡張機能の関連付けを確認するボタンがアプリケーションにあることです。残念ながら、上記の状況では、私のアプリケーションは、拡張機能が既に正常に関連付けられていることを確認するメッセージを表示します。これを回避する方法はありますか?