そこで、アプリケーションを C# とシェル統合する (右クリック メニューに追加する) 方法のガイドを検索しましたが、特定のファイル タイプに対してのみそれを行う方法が見つかりませんでした。WinRarがそれを行うので、それが可能であることを私は知っています。では、どうすればそれを行うことができますか?
2 に答える
通常、これを実装するには 2 つの方法があります。
レジストリ キー - HKEY_CLASSES_ROOT の下にキーと値を書き込むことができます。そのハイブを見ると、PC の拡張機能が表示されます。キーと値の詳細については、この記事を参照してください。
.myfile
ここでは、アプリケーションでタイプを開くオプションのような単純なものが可能です。ファイルの関連付けの例を次に示しますシェル拡張 (COM で記述) : ここでは、ハンドラーなどのより複雑なことを行うことができます。これらは Windows によって呼び出されるため、メニューにペイントしたり、ファイルを右クリックしたときにカスタム アクションを追加したりできます。ここにはファイルだけではありません。プロパティ シートやカスタム ツールチップを追加することもできます。
.NET を使用して Shell Handler を作成しないという話もあります**。これは、古いバージョンの .NETにのみ適用されます。.NET4 で問題ありません。
この記事は、.NET4 のコンテキスト メニュー ハンドラーについて説明します。
**推奨されなかった理由:
シェル ハンドラーを作成すると、ホスト プロセス (通常は Windows エクスプローラー) によって呼び出されますが、FileOpenDialogs や FolderBrowser ダイアログなどからも呼び出されます。そのため、.NET 2.0 でシェル拡張機能を作成し、.NET 1.1 アプリがファイルを開くダイアログを呼び出すと、.NET 2.0 シェル ハンドラーが呼び出され、古い CLR を持つ .NET 1.1 アプリで問題が発生します。バージョンの競合が発生します。
したがって、最終的にこれが.NET 4で何らかの形で修正されたことを知ってうれしく思います=)
Windows エクスプローラーの右クリック メニューは、レジストリによって制御されます。具体的には、HKEY_CLASSES_ROOT ハイブです。
すべてがどのように機能するかを理解する良い方法HKCR\.txt
は、右クリック メニューでテキスト ファイルに何が起こるかを確認することです。「txtfile」を指す (デフォルト) キーを見てください。 HKCR\txtfile
次に、サブキーHKCR\txtfile\shell\open\comman
d を持ちます。そのための (デフォルト) キーは、開かれているファイルを示す "%1" のパラメーターを使用して notepad.exe を開くコマンドを示しています。open キーを別の名前に置き換えて (txtfile キーの print および printto キーを参照)、別のカスタム コマンドを右クリック メニューに追加します。
アプリケーションを統合するために何を追加する必要があるかを把握したら、C# コードを介してレジストリを操作するのに役立つクラスのMicrosoft.Win32 名前空間を確認できます。