3

私は非常に素晴らしいチュートリアルを見つけました。このチュートリアルにないものを理解しようとしています (tut 自体は正常に動作するため) http://www.codeproject.com/Articles/9163/File-Rating-a-practical -シェル拡張の例

WinRar、TortoiseSVN、ウイルス対策アプリなどのアプリケーションを見ると、シェル拡張項目の横にアイコンがあります。

これがどのように行われるか知りたいです。(プログラムで C# を使用)

セパレーターの追加は機能し、サブメニューの追加は機能し、クリック+アクションも機能しますが、アイコンに苦労しています。これはそれほど難しいことではありません。誰か助けてくれませんか?

また、Microsoft が .NET 4.0 でこれをサポートしなくなったとは言わないでください。これは保証されておらず、サンプルコードを提供していないためです。他のすべてのアプリがそれを実行できる場合、それは可能です。

サンプル コード、チュートリアル、または実際に動作するコードを提供してください。

4

3 に答える 3

3

次の記事をご覧ください。.NET 4.0 を使用して、SharpShell nuget パッケージを使用して Windows シェル拡張機能を作成します。

NET シェル拡張 - シェル コンテキスト メニュー

このライブラリを使用すると、以下に示すように contextmenustrip を作成しながら画像を直接設定できます。

protected override ContextMenuStrip CreateMenu()
{
    //  Create the menu strip.
    var menu = new ContextMenuStrip();

    //  Create a 'count lines' item.
    var itemCountLines = new ToolStripMenuItem
    {
        Text = "Count Lines...",
        Image = Properties.Resources.CountLines
    };

    //  When we click, we'll count the lines.
    itemCountLines.Click += (sender, args) => CountLines();

    //  Add the item to the context menu.
    menu.Items.Add(itemCountLines);

    //  Return the menu.
    return menu;
}
于 2013-04-24T13:37:46.777 に答える
2

次のレジストリ キーに追加するだけで済みます: HKEY_LOCAL_MACHINE\SOFTWARE\Classes*\shellex\ContextMenuHandlers。コードは次のとおりです。

 string TimeStamp = DateTime.Now.ToString("dd-MM-yyyy");

string key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\*\\shellex\\ContextMenuHandlers\\Winrar";
string valueName = "MyWinrar";
Microsoft.Win32.Registry.SetValue(key, valueName, HERE WHAT YOU WANT TO START, Microsoft.Win32.RegistryValueKind.String);

私はそれがあなたのために働くことを願っています!

于 2014-01-21T18:59:42.060 に答える
0

リストしたすべてのアプリは、COM とアンマネージ コードを使用してオーバーレイ アイコン ハンドラーを作成します。TortoiceCSV、TortoiseSVN、TortoiseGIT のアイコンを描画するための共通ライブラリを提供する特別なプロジェクト TortoiseOverlays もあります。ソースコードを見て、それがどのように行われているかを知ることができます。同様のアイコンを描画したい場合は、おそらくそれを再利用する必要があります。

このタイプの拡張機能に .Net を使用することはお勧めしません。異なる .Net バージョンに対してビルドされた複数の拡張機能がエクスプローラー プロセスでロードしようとすると、エクスプローラーがクラッシュするためです。

于 2013-04-24T13:32:26.140 に答える