4

問題

言語: C# 2.0 以降


ユーザーが特定のファイル (私の場合は *.eic) を右クリックしたときにメニューを作成するコンテキスト ハンドラーを登録したいと思います。これらのメニューから登録、登録解除 (クリーンアップ)、およびイベント (クリック) を処理する手順は何ですか?

Windows レジストリと関係があるという手がかりはありますが、.net にどれだけのものがあるかを考えると、これをクリーンで簡単に行うための便利な方法があっても驚かないでしょう。

コード スニペット、Web サイトの参照、コメントはすべて有効です。私に投げてください。

アップデート


何人かのユーザーがコメントしているように、マネージ言語でコンテキスト メニューを作成する際に若干の問題があることは明らかです。同じ動作を達成するための他の好ましい方法はありますか、またはこれらの回避策を調べるのに時間を費やす必要がありますか? 人々がこれを可能にするために努力してくれたことをうれしく思いますが、これを達成するための「適切でクリーンな」方法があるかどうかを知りたいです。

4

7 に答える 7

6

マネージ言語でシェル拡張を作成することに抵抗してください。この方法を追求すると、大きな問題が発生する可能性があるものが多数あります。

詳細については、このスレッドを参照してください。本当に必要な場合に実行するためのリンクと、実行できるがすべきではない理由についての賢明なアドバイスが含まれています。

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/1428326d-7950-42b4-ad94-8e962124043e/

ここでは、唯一の実際のツールとしてアンマネージ C/C++ に戻ります。

于 2008-09-22T21:09:33.060 に答える
2

フレームワークの競合により、純粋な .NET でシェル拡張機能を記述することは悪い考えであると他の人は既に述べていますが、それでも次の点に注意する必要があります。

  1. サード パーティ製のドライバー (Eldos または LogicNP を参照) がアンマネージ側で実行され、ネイティブ ドライバーと対話するマネージ コードを記述できるようになり、シェル関連の CLR バージョンの競合が防止されます。

  2. 最近の MSDN の記事では、Microsoft が Silverlight で使用されている CoreCLR でこの問題を解決したことが言及されています。彼らは、CLR の複数のバージョンを同じプロセスで実行できるようにすることでこれを達成し、問題を修正しました。著者はさらに、Silverlight でのこの修正は、完全な CLR の将来のバージョンに組み込まれる予定であると述べています。(つまり、将来的には、マネージ コードでシェル拡張を記述することがかなり実現可能になるでしょう。)

于 2008-09-22T21:20:41.897 に答える
2

異なるバージョンの .NET Framework 間で依存関係の問題が発生する可能性があるため、これはお勧めできません。シェル拡張機能が 1 つのバージョンを予期している可能性がありますが、現在実行中のアプリケーションによって別のバージョンが既に読み込まれている可能性があります。

このスレッドには、状況の適切な要約が含まれています。

于 2008-09-22T21:12:44.987 に答える
2

私は以前にC#でそれらをやったことがあります。それは、本来あるべきよりもはるかに難しい地獄になってしまいます。ただし、定型コードを理解すれば、新しい項目を簡単に展開できます。私はこのリンクをたどった:

情報へのリンク

于 2008-09-22T21:16:40.220 に答える
1

以前のコメントで述べたように、マネージ言語でシェル拡張機能を記述することは最善のアイデアではありませんが、まさにそれを行っているオープン ソース プロジェクトを共有したいと思いました :)

ShellGlueは、実際に非常に役立つマネージド シェル拡張機能です。このソースは、C/C++ でシェル拡張機能を作成することに興味がある場合にも役立つ可能性があります。

于 2008-09-22T21:16:42.200 に答える
1

他の人が指摘しているように、シェル拡張は現在の Windows 開発では実用的ではありません。

私は最近、私がやりたいことを正確に行うためのガイドへのリンクで回答された同様の質問をしました

于 2009-03-06T03:13:05.373 に答える